2017-10-19 158 views
0

我使用laravel查詢生成器從MySQL數據庫 連接兩個表,當我在外殼Laravel查詢生成器加入爲RAW

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

結果

enter image description here

使用原始查詢不同勢

當使用laravel查詢Builderas如下

$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(); 

我從來沒有得到第四行,如果我用第一次使用左加入child_accounts不是結果?

+0

首先第一件事情,你是真的不使用laravel口若懸河加入。您正在使用查詢生成器。兩者之間有區別。嘗試正確定義模型,然後使用laravel雄辯。它將減少連接到只有一條線。 –

+0

@JunaidAhmad編輯帖子 – JenuRudan

+0

再次不使用查詢生成器直到或除非用eloquents不可能。 –

回答

0

如果你有一些問題Laravel DB查詢邏輯可以執行原始的SQL requests或使用簡單的版本一樣this
例如:

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

但是,如果你真的想明白的地方是你的問題,我建議你將你的數據庫查詢轉換爲sql,看看你的請求是否相同。更多here
TLDR;
只需在查詢結尾處添加->toSql()並讀取輸出即可。比將你的laravel查詢轉換爲與SQL版本相同。

1

嘗試使用方法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();