Laravel whereDoesntHave() - multiple OR conditions Laravel whereDoesntHave() - multiple OR conditions laravel laravel

Laravel whereDoesntHave() - multiple OR conditions


You can use doesntHave and specify the boolean operator:

$products = Product::doesntHave('categories')->doesntHave('countries', 'or')->get();

Actually you only need whereDoesntHave if you want to pass in a closure to filter the related models before checking if any of them exist. In case you want to do that you can pass the closure as third argument:

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


Since Laravel 5.5 there is an orWhereDoesntHave function.

You may use it like this

Product::whereDoesntHave('categories', function($q){ //... })       ->orWhereDoesntHave('countries', function($q){//...})       ->get();

From you example it seems that you are not using a where clause, so you may just use

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


Use

Product::whereDoesntHave('categories')->doesntHave('countries', 'or')->get();

Laravel Source Code:

whereDoesntHave https://github.com/illuminate/database/blob/master/Eloquent/Builder.php#L654callshttps://github.com/illuminate/database/blob/master/Eloquent/Builder.php#L628internally.