Вам понадобится несколько вложенных циклов для обработки вложенных отношений.Но во-первых, ошибка, которую вы получаете, связана с отсутствием закрытия;вам нужно вызвать ->get()
после имени отношения:
$routeFields = $stream->FieldRoutes()->get();
// Or, omit the ()
$routeFields = $stream->FieldRoutes;
Затем выполните цикл, чтобы получить поля:
foreach($routeFields AS $routeField){
$fields = $routeField->fields()->get();
// Or, again, omit the () (in fact, never use () in a loop)
$fields = $routeField->fields;
}
Наконец, еще один цикл для доступа к свойствамкаждый Field
:
foreach($fields AS $field){
// Do whatever you want with $field...
}
В целом это будет выглядеть следующим образом:
$stream = Stream::with(["FieldRoutes", "FieldRoutes.fields"])->find(1);
$routeFields = $stream->FieldRoutes;
foreach($routeFields AS $routeField){
$fields = $routeField->fields;
foreach($fields AS $field){
// Do whatever with $field
}
}
// Simplified
foreach($stream->FieldRoutes AS $routeField){
foreach($routeField->fields AS $field){
// Do whatever with $field
}
}
Также, пожалуйста, исправьте имя вашей функции FieldRoutes
, которое должно быть fieldRoutes
(имена функцийcamelCase
)
Примечание: я использовал ::with()
, чтобы «загружать» отношения, чтобы вы не запрашивали их во время цикла, поскольку это огромный удар по производительности.