'Laravel Where Count > N

I have 2 models in my app:

1. Customer.php

2. Car.php

Now I would like to run a query that returns all customers that have less than 2 cars. Where 2 is a number that can be changed by the user.

I have tried this but it didn't work, it just returns all customer records:

$customers = Customer::whereHas("cars", function($query) {
    $query->selectRaw("count(*) < ?", [2]);
})
->get();

Edit: The two models are linked in a pivot table, meaning A customer can have more than 1 car and a Car can belong to more than 1 customer.



Solution 1:[1]

So , here is the result.

Relation in model Customer.php

public function cars()
{
    return $this->belongsToMany('App\Car','car_customer','car_id','customer_id');
}

Query to get all customers with N cars:

 $userInput = 2;
 $data = Customer::with('cars')
                ->withCount('cars')
                ->has('cars', '<', $userInput)
                ->orderBy('cars_count', 'desc')
                ->get();

Where the $userInput is your 'N'.

Solution 2:[2]

This is the best way:

$customers = Customer::has('cars','<', 2)->get();

Solution 3:[3]

Have you tried this approach?

$input = 2;
$customers = Customer::whereHas("cars", function($query) use ($input) {
    $query->where(DB::raw("count(cars.id)"), "<", DB::raw($input))
})->get();

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Mahmoud Abdelsattar
Solution 2
Solution 3 Mahmoud Abdelsattar