如何在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

Laravel eloquent multiple has and where clause

+0

$ reqObj->其中(函数($ Q){$ Q->有( '组'); $ Q-> orHas( '组 - 成员');}) ;似乎对我来说工作得很好。 – tromtv

输入代码hereIf你的用户$this->bots,其结果将是laravel集合阵列。您需要使用$this->bots()这样的:

public function broadCasters(){ 
    return $this->bots()->where(function($query){ 
    return $query->has('TextPost')->orHas('PhotoPost') ...; 
    })->get(); 
}