我很难理解WhereHas中的关系计数条件。docs页面没有讨论它,但是API page讨论过它。引用API的话。
Builder_Builder whereHas(string $relation,闭包$callback,string $operator =‘>,int $count = 1) 将关系计数条件添加到where子句的查询中。
示例
Resource
模型与ResourceCategory
有多对多的关系
public function categories()
{
return $this->belongsToMany('ResourceCategory', 'resource_category_mapping');
}
关系条件在Has中的应用
Has中的关系条件正按预期工作。
Resource::has('categories', '>', 1)->get()
//this return all resources which have more than one catgories
关系条件在WhereHas中的应用
WhereHas中的关系条件不像预期的那样工作。我相信我误解了这一点。
Resource::whereHas('categories', function ( $query){
$query->whereIn('resource_category_id', [1, 2, 4]);
}, '>', 1)->get()
上面的代码应该返回资源,这些资源的类别属于1、2、4之一,并且资源有多个类别。但事实并非如此。
问题
请用WhereHas解释一下关系状况,也许提供一个例子会很有帮助。
发布于 2015-07-25 01:59:50
通常,whereHas()检查您的模型是否至少有一个与相关的模型。可以将$count设置为更高的值,以将计数增加到N,并只获取至少与N相关的模型。
在你的情况下,打电话
Resource::has('categories', '>', 2)->get();
将只返回那些具有至少两个与相关的的的资源类。
https://stackoverflow.com/questions/31624165
复制