Laravel WHERDOESNTHAVE()-多个或多个条件

Laravel WHERDOESNTHAVE()-多个或多个条件,laravel,relationship,Laravel,Relationship,在Laravel 4.2中,我有一个名为Product的模型,它与其他模型(如Country或Category)有多对多关系。我想过滤掉“不完整”的产品,这意味着它们没有关联的国家或类别。我可以使用whereDoesntHave()方法筛选出一个关系。当我在一个查询中使用它两次时,它会创建和条件,但我需要或。我在API文档中找不到或wheredoesnthave()方法。我无法将多个关系作为参数传递,因为它希望第一个参数是字符串 我需要这样的东西: $products=Product::wher

在Laravel 4.2中,我有一个名为Product的模型,它与其他模型(如Country或Category)有多对多关系。我想过滤掉“不完整”的产品,这意味着它们没有关联的国家或类别。我可以使用
whereDoesntHave()
方法筛选出一个关系。当我在一个查询中使用它两次时,它会创建
条件,但我需要
。我在API文档中找不到
或wheredoesnthave()
方法。我无法将多个关系作为参数传递,因为它希望第一个参数是字符串

我需要这样的东西:

$products=Product::whereDoesntHave('categories')->或whereDoesntHave('countries')->get();

有没有办法在多个
条件下实现
where doesnthave()

Product::whereDoesntHave('categories')->doesntHave('countries', 'or')->get();
Laravel源代码:

他们在哪里 电话
内部。

您可以使用
doesntHave
并指定布尔运算符:

$products = Product::doesntHave('categories')->doesntHave('countries', 'or')->get();
实际上,如果您想在检查相关模型是否存在之前传入一个闭包来过滤相关模型,您只需要
whereDoesntHave
。如果要这样做,可以将闭包作为第三个参数传递:

$products = Product::doesntHave('categories', 'or', function($q){
    $q->where('active', false);
})->doesntHave('countries', 'or')->get();

因为Laravel 5.5有一个函数

你可以这样使用它

Product::whereDoesntHave('categories', function($q){ //... })
       ->orWhereDoesntHave('countries', function($q){//...})
       ->get();
从您的示例来看,似乎您没有使用where子句,所以您可以只使用where子句

Product::doesntHave('categories')
       ->orDoesntHave('countries')
       ->get();

谢谢,看起来我错过了
doesntHave()
方法及其第二个参数。谢谢,我在阅读API时错过了
doesntHave()
。您的第一个代码示例正是我需要的。