Laravel ownToMany получить данные дополнительных атрибутов сводной таблицы - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть таблицы routes и stations с реляционной сводной таблицей route_station. Я могу получить реляционные данные, используя belongsToMany отлично.

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

Выход ремесленника

>>> $stations = $route->stations()->orderBy('pivot_station_order', 'asc')->get()
=> Illuminate\Database\Eloquent\Collection {#3097
     all: [
       App\Station {#3077
         id: 2,
         name: "Daugherty Fort",
         code: "LOGA",
         info: "Dolore blanditiis voluptatem recusandae eos. Et minus dicta culpa iusto et sequi fugiat. Et vel totam et earum. Ad consequatur qui consequatur distinctio dolorem modi consequatur. Est non id accusamus magni magni delectus.",
         photo: null,
         created_at: "2020-02-21 04:31:24",
         updated_at: "2020-02-21 04:31:24",
         pivot: Illuminate\Database\Eloquent\Relations\Pivot {#3105
           route_id: 1,
           station_id: 2,
           next_station_id: 3,
           interchange_id: null,
           station_order: 1,
           distance: 2.3,
           duration: 120,
           created_at: "2020-02-21 04:59:07",
           updated_at: "2020-02-21 05:01:15",
         },
       },
       App\Station {#3100
         id: 3,
         name: "Armstrong Green",
         code: "QWUB",
         info: "Eos enim reiciendis voluptas animi aut aliquid. Dignissimos incidunt placeat dolore. Magni et qui ipsam ullam dolorum numquam iusto. Eligendi impedit laudantium sint quia quam reprehenderit necessitatibus quos.",
         photo: null,
         created_at: "2020-02-21 04:31:24",
         updated_at: "2020-02-21 04:31:24",
         pivot: Illuminate\Database\Eloquent\Relations\Pivot {#3127
           route_id: 1,
           station_id: 3,
           next_station_id: 4,
           interchange_id: null,
           station_order: 2,
           distance: 1.2,
           duration: 95,
           created_at: "2020-02-21 05:44:04",
           updated_at: "2020-02-21 05:44:04",
         },
       },
       App\Station {#3128
         id: 4,
         name: "Monroe Locks",
         code: "FXNU",
         info: "Necessitatibus vero sed mollitia reprehenderit est repudiandae. Dolorem voluptas est similique amet molestiae consequatur.",
         photo: null,
         created_at: "2020-02-21 04:31:24",
         updated_at: "2020-02-21 04:31:24",
         pivot: Illuminate\Database\Eloquent\Relations\Pivot {#3092
           route_id: 1,
           station_id: 4,
           next_station_id: 5,
           interchange_id: null,
           station_order: 3,
           distance: 2.7,
           duration: 180,
           created_at: "2020-02-21 05:44:44",
           updated_at: "2020-02-21 05:44:44",
         },
       },
     ],
   }

Вопрос:

Однако у меня есть дополнительное поле в сводной таблице, которое все принадлежит stations Таблица. Я хочу получить подробности об этих атрибутах. Так нужно ли создавать другой объект станции для извлечения данных для next_station_id и interchange_id или есть какой-либо способ использования Eloquent, чтобы избежать создания нового объекта станции?

1 Ответ

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

Это может быть невозможно сделать прямо из коробки. Тем не менее, на мой взгляд, вы делаете это путем создания RoutesStaionmodel, который расширяет сводную область, а затем стремится загрузить эти отношения. Хотя для этого я бы просто использовал пакет типа https://github.com/ajcastro/eager-load-pivot-relations.

...