[英]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.