Я, возможно, неправильно понимаю, и я знаю, что у вас уже есть принятое решение, но если вы хотите, чтобы клиенты, у которых есть машины, мне кажется, что здесь ответы приходят с неправильной стороны - вам не нужны машины с клиентами Вы хотите клиентов.
В качестве первого шага:
Customers::has('machines')->get();
предоставит вам список клиентов, у которых есть хотя бы 1 машина.
Чтобы включить ограничение даты, вы можете использовать whereHas()
, чтобы сделать что-то вроде:
Customers::whereHas('machines', function (Builder $query) {
$query->whereDate('cert_date', '<', date('Y-m-d'));
})->get();
Это даст вам всех клиентов, у которых есть хотя бы один компьютер соответствует условию даты. Обратите внимание, что в него не входят машины - это просто список клиентов.
Если вы хотите включить в результаты машины клиента, вам нужно использовать with()
, ограничивая его то же условие даты:
Customers::whereHas('machines', function (Builder $query) {
$query->whereDate('cert_date', '<', date('Y-m-d'));
})->with(['machines' => function($query) {
$query->whereDate('cert_date', '<', date('Y-m-d'));
}])->get();
Это предоставит вам список всех клиентов, у которых есть хотя бы один компьютер, соответствующий условию даты, и перечислит машины каждого клиента как свойство клиента, доступное как $customer->machines
. Затем вы можете перебирать клиентов и делать что-то вроде (в режиме просмотра лезвия):