如何在 laravel 5.4 orm 中执行多个 has() /orHas()
Posted
技术标签:
【中文标题】如何在 laravel 5.4 orm 中执行多个 has() /orHas()【英文标题】:how can do a multiple has() /orHas() in laravel 5.4 orm 【发布时间】: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
Laravel eloquent multiple has and where clause
【问题讨论】:
$reqObj->where(function($q)$q->has('group');$q->orHas('group_member'););对我来说似乎工作正常。 【参考方案1】:在此处输入代码如果您使用$this->bots
,则结果将是 laravel 集合数组。你需要像这样使用$this->bots()
:
public function broadCasters()
return $this->bots()->where(function($query)
return $query->has('TextPost')->orHas('PhotoPost') ...;
)->get();
【讨论】:
以上是关于如何在 laravel 5.4 orm 中执行多个 has() /orHas()的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Laravel 中为 ORM 急切加载添加多个键约束?
Laravel 5.4 - 如何为同一个自定义验证规则使用多个错误消息