Maison  >  Article  >  base de données  >  Comment corriger l'erreur « Propriété non définie » dans Laravel 5.1 lors de l'exécution de requêtes brutes avec UNION ?

Comment corriger l'erreur « Propriété non définie » dans Laravel 5.1 lors de l'exécution de requêtes brutes avec UNION ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-23 14:12:02673parcourir

How to Fix

Exécution de requêtes brutes dans Laravel 5.1

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn