什么是WhereHas Laravel中的关系计数条件

时间:2015-07-25 07:39:00

标签: php laravel laravel-4 eloquent

我很难理解WhereHas中的关系计数条件。文档页面没有讨论它,但API page谈论它。来自API。

  

Builder | Builder whereHas(string $ relation,Closure $ callback,string   $ operator ='> =',int $ count = 1)

     

向具有where子句的查询添加关系计数条件。

示例

SPARK_CLASSPATH模型与Resource

的关系多对多
ResourceCategory

Has中的关系条件

Has中的关系条件正在按预期工作。

public function categories()
{
    return $this->belongsToMany('ResourceCategory', 'resource_category_mapping');
}

WhereHas中的关系条件

WhereHas中的关系条件未按预期工作。我确信我误解了它。

Resource::has('categories', '>', 1)->get()
//this return all resources which have more than one catgories

上述代码应该返回其类别属于[1,2,4]的资源,并且资源具有多个类别。但事实并非如此。

问题

请在WhereHas中解释关系条件,可能提供一个例子会有很大帮助。

1 个答案:

答案 0 :(得分:19)

通常情况下, whereHas()会检查您的模型是否具有至少一个相关模型。您可以将 $ count 设置为更高的值,以将计数增加到 N ,并仅获取至少具有 N 相关模型的模型。< / p>

在您的情况下,请致电

Resource::has('categories', '>', 2)->get();

仅返回至少2个相关类别的资源