2017-04-13 70 views
0

我有2個表,客戶和公司 每個公司都有許多客戶,每個客戶都有一個公司Laravel雄辯的問題:方法不存在

這是我的模型:

class Client extends Model 
{ 
    public function company(){ 
     return $this->hasOne('App\Company'); 
    } 
} 

class Company extends Model 
{ 
    public function clients(){ 
     return $this->hasMany('App\Client'); 
    } 
} 

我試圖讓公司 的所有客戶端的列表,這就是我試圖做的:

$clients = Company::where('guid',$guid)->clients()->all(); 

我得到這個錯誤:

BadMethodCallException in Macroable.php line 74: 
Method clients does not exist. 

感謝您的幫助!

+0

'where'只會創建一個查詢。 ('guid',$ guid) - > first() - > clients() - > all()' – apokryfos

+0

現在我得到這個錯誤:調用未定義的方法Illuminate \ Database \ Query \ Builder :: all() –

+1

也許:'Company :: where('guid',$ guid) - > first() - > clients() - > get()'? – apokryfos

回答

3
$clients = Company::where('guid',$guid); 

這將返回生成器類,所以當你再加入->clients()它會給你的錯誤,因爲建築商類沒有客戶端的方法,你的模型做。

正確的代碼是..

$clients = Company::with('clients')->where('guid',$guid)->get(); 

PS。不要使用->all()除非它是像在模型中定義$companies = Company::all()

0

你的關係必須這樣調用:

$clients = Company::where('guid',$guid)->clients; 

它會查詢所有的客戶在您的公司,請不要使用該方法的所有( ) 去做這個。並且在您的客戶模型上進行搜索。

$company = Client::where('id', 1)->company;