Как получить ТОЛЬКО строки сводок с помощью Laravel Eloquent? - PullRequest
0 голосов
/ 17 октября 2019

У меня есть три модели и сравнительные таблицы:

  • назначения (модель: назначение)
  • терапии (модель: терапия)
  • назначение_ терапии (нет модели)

Каждое посещение может иметь много методов лечения (массаж, первый визит, бег и т. Д.).

Через форму поиска мне нужно получить, например, всемассажные процедуры, проводимые во всех встречах, то есть мне нужен цикл через таблицу назначений.

Я пытался:

Appointment::with(['therapies' => function ($sub) use ($request) {
   $sub->where('therapy_id', $request->therapy_id);
}]) ->get();

С помощью этого запроса я получаю все встречи и все методы лечениякак дети.

  • назначение 1
    • терапия 1
    • терапия 2
  • назначение 2
    • терапия 3
    • терапия 4

В результате я не могу пройти курс терапии;то, что я хочу, это как:

  • терапия 1
  • терапия 2
  • терапия 3
  • терапия 4

Я отредактировал, куда идти с, что более правильно.

1 Ответ

1 голос
/ 17 октября 2019

Метод pluck может возвращать методы лечения, и вам также следует загружать методы лечения, чтобы избежать повторяющихся запросов.

$appointments = Appointment::whereHas('therapies', function ($sub) use ($request) {
   $sub->where('therapy_id', $request->therapy_id);
})->with('therapies')->get();

$therapies = $appointments->pluck('therapy');

Переменная therapies будет коллекцией всех терапий, прикрепленных к встречам, возвращаемым первым запросом.

Если вам нужно, чтобы в возвращенной коллекции все еще была информация о назначении, вместо этого основывайте свой запрос на методах лечения и стремитесь загрузить связанные встречи

Therapy::where('id', $request->therapy_id)->with('appointments'); 
...