首页 文章

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

提问于
浏览
8

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

Builder | Builder whereHas(string $ relation,Closure $ callback,string $ operator ='> =',int $ count = 1)向where子句的查询添加关系计数条件 .

Example

Resource 模型与 ResourceCategory 有多对多的关系

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

Relationship condition in Has

Has中的关系条件正如预期的那样工作 .

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

Relationship condition in WhereHas

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

Resource::whereHas('categories', function ( $query){
            $query->whereIn('resource_category_id', [1, 2, 4]);
        }, '>', 1)->get()

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

Question

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

1 回答

  • 18

    通常, whereHas() 检查您的模型是否具有 at least one 相关模型 . 您可以将 $count 设置为某个更高的值,以将计数增加到 N ,并仅获取至少具有 N 相关模型的模型 .

    在你的情况下,打电话

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

    将仅返回具有 at least 2 相关类别的 Resources .

相关问题