Maison >base de données >tutoriel mysql >Comment corriger l'erreur « Propriété non définie » dans Laravel 5.1 lors de l'exécution de requêtes brutes avec UNION ?
Problème :
Exécution d'une requête MySQL brute avec Laravel, incluant une UNION complexe opération, entraîne une erreur « Propriété non définie ».
Solution :
Exécutez la requête directement sur la base de données à l'aide de DB::select().<code class="mysql">SELECT cards.id_card, cards.hash_card, cards.`table`, users.name, 0 as total, cards.card_status, cards.created_at as last_update FROM cards LEFT JOIN users ON users.id_user = cards.id_user WHERE hash_card NOT IN ( SELECT orders.hash_card FROM orders ) UNION SELECT cards.id_card, orders.hash_card, cards.`table`, users.name, sum(orders.quantity*orders.product_price) as total, cards.card_status, max(orders.created_at) last_update FROM menu.orders LEFT JOIN cards ON cards.hash_card = orders.hash_card LEFT JOIN users ON users.id_user = cards.id_user GROUP BY hash_card ORDER BY id_card ASC</code>
Raison de la "Propriété non définie " Erreur :
<code class="php">$cards = Card::selectRaw('cards.id_card, cards.hash_card ,cards.table, users.name, 0 as total, cards.card_status, cards.created_at as last_update') ->leftJoin('users','users.id_user','=','cards.id_user') ->whereNotIn( 'hash_card', Order::select('orders.hash_card')->get() ) ->union( Order::selectRaw('cards.id_card, orders.hash_card, cards.table, users.name, sum(orders.quantity*orders.product_price) as total, cards.card_status, max(orders.created_at) as last_update') ->leftJoin('cards','cards.hash_card','=','orders.hash_card') ->leftJoin('users','users.id_user','=','cards.id_user') ) ->groupBy('hash_card') ->orderBy('cards.id_card','asc') ->get();</code>
La méthode selectRaw() de Laravel s'attend à ce que la requête soit au format du générateur Eloquent, ce qui implique l'utilisation du chaînage de méthodes pour des opérations telles que leftJoin() etwhereNotIn(). Cependant, l'opération UNION n'est pas prise en charge dans le format builder et doit être exécutée manuellement via DB::select().
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!