2016-01-02 146 views
2

我有父ID和一個孩子CATEGORY_ID自參考表,此查詢的工作具有SQL:Laravel查詢左連接

SELECT a.id, a.name, b.name, a.created_at 
      FROM shop_categories a 
      LEFT JOIN shop_categories b ON (a.id = b.category_id) 
      WHERE a.category_id = 0 

而且我想這個翻譯成Laravel查詢生成器的語言,我管理拿出這一點,但它不工作,我不知道我做錯了什麼,我laravel查詢:

$shopcategories = DB::table('shop_categories as a') 
      ->select('a.id', 'a.name','b.name','a.created_at') 
      ->leftJoin('shop_categories as b', function ($join) { 
       $join->on('a.id', '=', 'b.category_id'); 
      }) 
      ->where('a.category_id', '=', 0) 
      ->get(); 

在此先感謝。

+0

簡化版,什麼工作是什麼呢?錯誤?錯誤的結果? – lesssugar

+0

錯誤的結果來自laravel查詢 – Bruno

+1

調用toSql()而不是get()來查看生成的SQL查詢並檢查它是否符合您的期望。如果沒有,請粘貼生成的查詢。 –

回答

3

使用查詢構建器以這種方式:

DB::table('table1') 
    ->leftJoin('table2', 'table1.columnX', '=', 'table2.columnY') 
    ->where('table1.other_column', '=', 'someValue') 
    ->select('table1.columnA as NewColumn1', 'table1.columnB as NewColumn2', 'table1.columnC as NewColumn3', 'table2.columnP4 as NewColumn', 'table2.columnQ as NewColumn5') 
    ->get(); 
+0

這不起作用,因爲它的自引用表(table1)和(table2)是同一個表。 – Bruno

+0

這可能會幫助你http://stackoverflow.com/questions/24672629/laravel-orm-from-self-referencing-table-get-n-level-hierarchy-json –