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 ?

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
Libérer: 2024-10-23 14:12:02
original
752 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal