2016-01-04 81 views
2

我想實現以下連接查詢實現與laravel加入5

SELECT * from users as u 

LEFT JOIN `table1` as ou 

ON ou.user_id = u.id 

LEFT JOIN table2 as o 

ON o.id = ou.orid 

LEFT JOIN table3 as p 

ON o.pra_id = p.id; 

我laravel模型,所以我創建了一個名爲ALLDATA()函數在我的用戶模型下面的代碼

public function alldata() 

{ 

    return $this 

     ->leftjoin('table1','users.id','=','table1.user_id') 

     ->leftjoin('table2','table1.orid','=','table2.id') 

     ->leftjoin('table3','table2.pra_id','=','table3.id'); 

} 

現在,當我嘗試訪問數據$ gd = User :: find(1) - > getall()它返回所有表 的結果,但是當我嘗試訪問$ gd = User :: all() - > alldata()它給錯誤的方法未找到 我該如何解決此問題 謝謝

+0

如果你的'alldata'功能是在例如你給'getall'? 我認爲它應該是,但任何方式給https://laravel.com/docs/5.2/eloquent-relationships看看你更好地建立在模型上的關係,而不是手動加載凌亂的加入。 –

回答

1

User :: find(1)函數返回對象的單個實例(如果找不到,則返回NULL)。

User :: all()函數返回所有用戶對象的集合。

您需要如下創建一個查詢,然後得到()的結果...

public static function alldata() 
    { 

    return self::query() 
     ->leftjoin('table1','users.id','=','table1.user_id') 
     ->leftjoin('table2','table1.orid','=','table2.id') 
     ->leftjoin('table3','table2.pra_id','=','table3.id') 
     ->get(); 
} 

假設你對你ALLDATA()方法是在用戶類,你可以調用與下面的代碼功能:

User::alldata(); 

Laravel有一個非常值得關注的優秀數據庫關係系統。它將使像一個以上的更簡單的查詢...

https://laravel.com/docs/5.1/eloquent-relationships

+0

謝謝,但仍然得到相同的錯誤 –

+0

我假設alldata()方法在您的用戶模型? 我已經更新了我的答案。 – RCrowt

+0

no sir its again在不在對象上下文中使用$ this –