簡體   English   中英

Laravel查詢生成器聯接與RAW不同

[英]Laravel Query Builder Join is diffrent from RAW

當我在外殼中使用原始查詢時,我正在使用laravel查詢生成器從mysql db連接兩個表

SELECT * from parent_accounts
LEFT JOIN child_accounts on parent_accounts.account_id=child_accounts.parent_id

結果

在此處輸入圖片說明

當使用laravel查詢生成器時如下

 $accounts=\DB::table('parent_accounts as p')->join('child_accounts as c','p.account_id','=','c.parent_id')->select('p.name AS parent','c.name as name','c.account_id as account_id','c.parent_id as parent_id')->get();

我從不進入第4行,如果我先使用child_accounts左聯接,那不是結果嗎?

嘗試使用查詢生成器的leftJoin()方法,因為在SQL查詢中您正在執行LEFT JOIN,例如:

$accounts= DB::table('parent_accounts as p')
               ->leftJoin('child_accounts as c','p.account_id','=','c.parent_id')
               ->select('p.name AS parent','c.name as name','c.account_id as account_id','c.parent_id as parent_id')
               ->get();

如果您對Laravel DB查詢邏輯有疑問,可以執行原始sql 請求或使用像這樣的簡單版本
例如:

$accounts= \DB::select(\DB::raw("
           SELECT * from parent_accounts
           LEFT JOIN child_accounts on 
           parent_accounts.account_id=child_accounts.parent_id");

但是,如果您真的想了解問題出在哪里,我建議您將數據庫查詢轉換為sql並查看您的請求是否相同。 這里更多。
TLDR;
只需在查詢末尾添加->toSql()並讀取輸出。 比將您的laravel查詢轉換為與SQL版本相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM