Laravel, где Count> N - PullRequest
       5

Laravel, где Count> N

0 голосов
/ 29 апреля 2018

В моем приложении 2 модели:

1. Customer.php

2. Car.php

Теперь я хотел бы выполнить запрос, который возвращает всех клиентов, у которых менее 2 автомобилей. Где 2 - это число, которое может быть изменено пользователем.

Я пробовал это, но это не сработало, он просто возвращает все записи клиентов:

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

Edit: Две модели связаны в сводной таблице, что означает, что клиент может иметь более 1 автомобиля, а автомобиль может принадлежать более чем 1 клиенту.

Ответы [ 3 ]

0 голосов
/ 29 апреля 2018

Используйте это:

$customers = Customer::withCount('cars')
    ->having('cars_count', '<', 2)
    ->get();
0 голосов
/ 29 апреля 2018

Итак, вот результат.

Отношение в модели Customer.php

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

Запрос, чтобы получить всех клиентов с N автомобилями.

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

$ userInput это ваш 'N'

0 голосов
/ 29 апреля 2018

Вы пробовали это?

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

...