【发布时间】:2017-08-26 06:17:13
【问题描述】:
首先我应该说我想使用 laravel ORM 而不是查询构建器而不是原始 sql 方法。所以这是我的问题。
我有一个名为 bots 的模型,它具有 belongTo(User::class) 关系和 6 个 hasMany(TextPost::class) - hasMany(PhotoPost::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。但是我看到了这个问题whereHas on multiple relationships - laravel 5.4,它非常接近我想要的,但还没有答案!!
这个问题也是我的另一个问题,Combining AND/OR eloquent query in Laravel
但它也不起作用。
现在这正是我想要但不起作用的,我认为因为它适用于 LARAVEL 4 并且我使用 LARAVEL 5.4
【问题讨论】:
-
$reqObj->where(function($q){$q->has('group');$q->orHas('group_member');});对我来说似乎工作正常。
标签: php orm laravel-5.4