什么是关系计数条件 WhereHas Laravel

2022-08-30 20:52:06

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

建造者|生成器 whereHas(字符串 $relation, 闭包 $callback, 字符串 $operator = '>=', int $count = 1)

使用 where 子句向查询中添加关系计数条件。

模型具有多对多的关系ResourceResourceCategory

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中的关系条件,可能提供一个例子会很有帮助。


答案 1

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

在您的情况下,致电

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

将仅返回至少具有 2 个相关类别的资源。


答案 2

推荐