2017-04-13 15 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;