如何在laravel 5.4 orm中实现多个()/ orHas()orm
问题描述:
首先,我应该说我想使用laravel ORM而不是查询构建器而不是Raw sql方法。所以这是我的问题。如何在laravel 5.4 orm中实现多个()/ orHas()orm
我有一个模型称为机器人有belongTo(User::class)
关系和6 hasMany(TextPost::class)
- 等。我想要获得至少有一条关于hasMany(...)
关系的记录的机器人。所以如果一个机器人在TextPost
有记录,它应该被退回,如果一个机器人没有任何hasMany(...)
关系的帖子,它不应该被退回。
到目前为止,我有这样的事情在我的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我看到这个问题whereHas on multiple relationships - laravel 5.4和它非常接近我想要的,但没有答案呢!
也是这个问题是另一个我的问题太多,Combining AND/OR eloquent query in Laravel
,但它不工作要么。
现在这正是我想要的,但没有工作,我觉得因为它的LARAVEL 4我用LARAVEL 5.4
答
输入代码hereIf你的用户$this->bots
,其结果将是laravel集合阵列。您需要使用$this->bots()
这样的:
public function broadCasters(){
return $this->bots()->where(function($query){
return $query->has('TextPost')->orHas('PhotoPost') ...;
})->get();
}
$ reqObj->其中(函数($ Q){$ Q->有( '组'); $ Q-> orHas( '组 - 成员');}) ;似乎对我来说工作得很好。 – tromtv