Laravel 5.5 красноречивый один-ко-многим не работает с помощью get () - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть one to many отношения, и мне нужно показать, где используются условия.

Когда я использую findOrFail(), это также работает.

$foo = Model::findOrFail(1);

на моем шаблонном блэйде

@foreach($foo->bars as $index=>$bar)

   {{ $bar->name }}

@endforeach

на моем коде выше, это работает.но ссылка на id, это не то, что мне нужно.

Мне нужно, используя условия где.например:

$foo = Model::where('conditon', 1)->get();

, затем я вызываю его на своем шаблоне блейда с

@foreach($foo->bars as $index=>$bar)

   {{ $bar->name }}

@endforeach

, затем получаю ошибку:

ErrorException (E_ERROR) Свойство[bars] не существует в этом экземпляре коллекции.

Кажется, что после get() я не могу позвонить child с $foo->bars

Как заставить это работать?

Ответы [ 3 ]

0 голосов
/ 24 сентября 2018

Поскольку ->get() извлекает несколько результатов, которые соответствуют критериям запроса.

Вы можете либо просмотреть циклы $foo результатов, либо использовать ->first() для получения первого совпадения запроса.

0 голосов
/ 24 сентября 2018

Метод findOrFail () возвращает экземпляр «Модели».Метод get () возвращает коллекцию экземпляров «Model», даже если есть только один результат.

, если вам нужен только один результат, используйте first () вместо get ().

$foo = Model::where('conditon', 1)->first();

, затем в шаблоне блейда выполните

@if($foo)
    @foreach($foo->bars as $index=>$bar)

       {{ $bar->name }}

    @endforeach
@endif

, если вам нужно несколько результатов, сделайте еще один foreach ().

@foreach($foo as $oneFoo)

    @foreach($oneFoo->bars as $index=>$bar)

        {{ $bar->name }}

    @endforeach

@endforeach

, если вы собираетесь использовать "несколько"Решение, я предлагаю вам назвать вашу переменную "foos".

$foos = Model::where('conditon', 1)->get();

и так

@foreach($foos as $foo)

    @foreach($foo->bars as $index=>$bar)

        {{ $bar->name }}

    @endforeach

@endforeach
0 голосов
/ 24 сентября 2018

Попробуйте использовать ->first() вместо ->get().

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