Laravel雄辩问题:方法不存在

问题描述 投票:0回答:2

我有 2 张桌子,客户和公司 每个公司有很多客户,每个客户有一个公司

这是我的模型:

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.

感谢您的帮助!

php laravel laravel-5 eloquent
2个回答
6
投票
$clients = Company::where('guid',$guid);

这会返回 Builder 类,因此当您添加

->clients()
时,它会给您错误,因为构建器类没有 client 方法,而您的模型有。

正确的代码是..

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

PS。不要使用

->all()
除非它类似于
$companies = Company::all()


0
投票

您在模型中定义的关系必须这样调用:

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

它将查询您公司的所有客户,不要使用 all() 方法来执行此操作。在您的客户模型上执行相同的操作以按公司搜索。

$company = Client::where('id', 1)->company;
© www.soinside.com 2019 - 2024. All rights reserved.