Laravel Eager Загрузка на вложенные отношения - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть одна родительская модель с дочерними отношениями, которую я пытаюсь упорядочить с помощью других отношений с ребенком.

Plan
-- Items
--- Details

Планирование предметов - это отношение один ко многим. Пункты к деталям - это отношение один к одному. Я хочу, чтобы элементы были упорядочены по полю, которое указано в деталях, например, в названии. Я думал, что это будет выглядеть примерно так в этой статье.

Plan::with([
  'items.details' => function ($query) {
      $query->orderBy('title', 'asc');
}])
->findOrFail(1);

Это не работает. Я видел много способов, как добавить его в модель Parent (Plan), но я хочу заказать отношения, а не родителя, тем более, что это всего 1 Plan. Я уверен, что есть простое решение, но я не могу обдумать это.

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

Поскольку title из другой таблицы details, отношения items и details являются взаимно-однозначными, вы можете использовать leftjoin следующим образом:

Plan::with([
  'items' => function ($query) {
      $query->leftjoin('details', 'details.item_id', '=', 'items.id')
            ->select('items.*', 'details.title')
            ->orderBy('title', 'asc');
}])
->findOrFail(1);
0 голосов
/ 22 апреля 2020

Я не знаю, столкнется ли кто-нибудь еще с этой проблемой. Ответ, что TsailKoga действительно работал, но коллекция была интересной. Как будто отношения перешли к родителю. Например.

Plan (parent)
-- Items 
--- Details

Все атрибуты Подробности стали частью предметов. Это сработало, но не совсем тот результат, который я хотел. Я попытался сделать несколько забавных usort, но как только вы конвертируете коллекцию в массив для использования с usort, вы теряете все инструменты, которые идут вместе с коллекциями / eloquent. Я нашел способ, который не требует ничего особенного. Коллекции имеют метод sortBy. Все, что мне нужно было сделать, это что-то вроде $plan->items->sortBy('details.title') и альта. Планы были отсортированы по названию. Дни работы на 1 строку кода.

Надеюсь, это поможет кому-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...