>  기사  >  데이터 베이스  >  UNION으로 원시 쿼리를 실행할 때 Laravel 5.1에서 \"정의되지 않은 속성\" 오류를 수정하는 방법은 무엇입니까?

UNION으로 원시 쿼리를 실행할 때 Laravel 5.1에서 \"정의되지 않은 속성\" 오류를 수정하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-23 14:12:02673검색

How to Fix

Laravel 5.1에서 원시 쿼리 실행

문제:

복잡한 UNION을 포함하여 Laravel을 사용하여 원시 MySQL 쿼리 실행 작업을 수행하면 "정의되지 않은 속성" 오류가 발생합니다.

쿼리:

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

실패한 Laravel 시도:

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

해결책:

DB::select()를 사용하여 데이터베이스에 대해 직접 쿼리를 실행합니다.

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

"정의되지 않은 속성"에 대한 이유 " 오류:

Laravel의 selectRaw() 메소드는 쿼리가 leftJoin() 및 whereNotIn()과 같은 작업에 메소드 체이닝을 사용하는 Eloquent 빌더 형식일 것으로 예상합니다. 단, UNION 연산은 빌더 형식에서 지원되지 않으며 DB::select()를 통해 수동으로 실행해야 합니다.

위 내용은 UNION으로 원시 쿼리를 실행할 때 Laravel 5.1에서 \"정의되지 않은 속성\" 오류를 수정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.