Heim >Datenbank >MySQL-Tutorial >Wie behebt man den Fehler „Undefinierte Eigenschaft' in Laravel 5.1 beim Ausführen von Rohabfragen mit UNION?

Wie behebt man den Fehler „Undefinierte Eigenschaft' in Laravel 5.1 beim Ausführen von Rohabfragen mit UNION?

Linda Hamilton
Linda HamiltonOriginal
2024-10-23 14:12:02749Durchsuche

How to Fix

Ausführen von Rohabfragen in Laravel 5.1

Problem:

Ausführen einer Roh-MySQL-Abfrage mit Laravel, einschließlich einer komplexen UNION Der Vorgang führt zu einem Fehler „Undefinierte Eigenschaft“.

Abfrage:

<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>

Fehlgeschlagener Laravel-Versuch:

<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>

Lösung:

Führen Sie die Abfrage mit DB::select() direkt für die Datenbank aus.

<code class="php">$cards = DB::select("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>

Grund für die „Undefinierte Eigenschaft“. " Fehler:

Laravels Methode selectRaw() erwartet, dass die Abfrage im Eloquent-Builder-Format vorliegt, was die Verwendung von Methodenverkettung für Operationen wie leftJoin() und whereNotIn() beinhaltet. Allerdings wird die UNION-Operation im Builder-Format nicht unterstützt und muss manuell über DB::select().

ausgeführt werden

Das obige ist der detaillierte Inhalt vonWie behebt man den Fehler „Undefinierte Eigenschaft' in Laravel 5.1 beim Ausführen von Rohabfragen mit UNION?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn