Laravel 5.0: запрос и отображение дочерних объектов в представлении из вложенных отношений

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

Модель OptionGroup

class OptionGroup extends Model {

protected $table = 'option_groups';

/**
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function option_choices()
{
return $this->hasMany('App\OptionChoice');
}

}

Модель OptionChoice

class OptionChoice extends Model {

protected $table = 'option_choices';

/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function option_group()
{
return $this->belongsTo('App\OptionGroup');
}

}

Модель модуляВопрос

class ModuleFftQuestion extends Model {

protected $table = 'module_questions';

/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function option_group()
{
return $this->belongsTo('App\OptionGroup');
}
}

Контроллер модуля

....
$questions = ModuleQuestion::with('option_group.option_choices')
->where('enabled', '=', 1)
->get()
->sortBy('id', true);

return view('modules.index', compact('questions'));

VIEW modules / index.blade.php

....
@foreach($questions as $question)
<section>
<ul>
@foreach($question->option_group->option_choices as $choice)
<li>
echo something here maybe  {!! $choice->name !!}
</li>
@endforeach
/ul>
</section>
@endforeach

Я бы подумал, что я мог бы сделать это в представлении выше, но это выдает ошибку:

ErrorException in 35dc55260ec747349284c8d119dae7bf line 17:
Trying to get property of non-object (View:     /www/resources/views/modules/index.blade.php)

Если я закомментирую вложенный foreach, я смогу увидеть запросы на панели отладки laravel, как показано ниже:

select * from `module_questions` where `enabled` = '1'
select * from `option_groups` where `option_groups`.`id` in ('2', '0', '3', '4', '5', '1')
select * from `option_choices` where `option_choices`.`option_group_id` in ('1', '2', '3', '4', '5')

Я бы сказал, что мои отношения в порядке, как показано ниже:

- An option_group has many option_choices
- An option_choice belongs to one option_group
- A module_question belongs to one option_group

Я явно что-то упускаю, что-то для меня еще не совсем щелкнуло, я новичок в Laravel и все время учусь, но это поставило меня в тупик.

Это просто, как я пытаюсь получить доступ к данным option_choice в представлении, или есть лучший способ сделать запрос с eloquent, который облегчит доступ к данным option_choice в представлении.

Любая помощь будет в значительной степени получена.

С уважением
M

1

Решение

Вероятно, для одного из ваших вопросов нет пунктов в option_group так что вы не можете получить доступ option_choices, Вы должны добавить еще одну проверку следующим образом:

@foreach($questions as $question)
<section>
<ul>
@if ($question->option_group)
@foreach($question->option_group->option_choices as $choice)
<li>
echo something here maybe  {!! $choice->name !!}
</li>
@endforeach
@endif
</ul>
</section>
@endforeach
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]