Самый простой (но не самый красивый) способ сделать это - просто найти всех пациентов с консультациями. Сложите этих пациентов в ряд, и тогда у вас в клинке вы будете проходить через этих пациентов и показывать консультации индивидуально.
Код контроллера:
$active_patients = [];
foreach(Patient::all() as $patient) {
if($patient->consultations->count()>0)
array_push($active_patients,$patient);
}
Передайте $ active_patients вашему представлению, затем зациклите его, как показано ниже. Очевидно, я не знаю всех имен атрибутов для ваших моделей пациента или консультации, и вам потребуется исправить html-разметку, как требуется, но вы можете получить картинку:
@foreach($active_patients as $patient)
<p>{{$patient->name}}:</p>
@foreach($patient->consultations as $consultation)
<p>{{$consultation->date}}</p>
@endforeach
@endforeach
Отказ от ответственности: это не самый надежный способ сделать это. Это просто самый простой подход. Лучший способ сделать это - использовать запросы с областями действия в сочетании с добавленными атрибутами. Например, вы могли бы создать область действия для модели «Пациенты» для всех пациентов, у которых есть консультация, используя метод красноречивых запросов whereHas, чтобы найти пациентов, у которых запланированы консультации. Тогда вы можете просто ссылаться на них как на ActivePatient вместо того, чтобы создавать массив каждый раз, когда ссылаетесь на них. Вы также можете добавить атрибут к модели Консультаций, который делает то же самое, захватывает каждую консультацию для конкретных пользователей и создает коллекцию вложенных моделей, но это гораздо сложнее. Я был бы рад поделиться с вами этим методом, если хотите, но приведенный выше код, по крайней мере, предоставит вам рабочий метод для достижения того, что вы просили.