[英]how can do a multiple has() /orHas() in laravel 5.4 orm
首先,我应该说我想使用laravel ORM而不是查询生成器,而不是Raw sql方法。 所以这是我的问题。
我有一个名为bots的模型,该模型具有belongTo(User::class)
关系和6 hasMany(TextPost::class)
hasMany(PhotoPost::class)
等。 我想获得在任何hasMany(...)
关系中至少具有一个记录的机器人。 因此,如果漫游器在TextPost
有记录,则应将其返回;如果漫游器在hasMany(...)
关系中均无任何记录, TextPost
应将其返回。
到目前为止,我的User
模型中有类似的内容
public function broadCasters()
{
return $this->bots->has('text_post')->orHas('photo_post')->orHas('media_post')->orHas('video_post')->orHas('audio_post')->orHas('document_post');
}
但它不起作用,并说Call to a member function orHas() on boolean
所以我想将其更改为以下内容:
public function broadCasters(){
return $this->bots->where(function($query){
return $query->has('TextPost')->orHas('PhotoPost') ...;
});
}
但这也不起作用,并且说Missing argument 2 for Illuminate\\Support\\Collection::where()
。 我该怎么办?
我使用laravel 5.4。 bu我看到这个问题在多个关系上存在-laravel 5.4及其与我想要的非常接近,但还没有答案!
这个问题也是我的另一个问题, 在Laravel中结合AND / OR雄辩的查询
但它也不起作用。
现在正是我不想要的,我认为是因为它适用于LARAVEL 4,而我使用LARAVEL 5.4
如果您使用$this->bots
,结果将是laravel collection array。 您需要像这样使用$this->bots()
:
public function broadCasters(){
return $this->bots()->where(function($query){
return $query->has('TextPost')->orHas('PhotoPost') ...;
})->get();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.