문제:
복잡한 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!