Laravel 5.5雄辩的一对多无法使用get()

时间:2018-09-24 09:22:44

标签: php laravel

我有one to many关系,需要显示使用where条件。

当我使用findOrFail()时,它也可以正常工作。

$foo = Model::findOrFail(1);

在我的模板刀片上

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

   {{ $bar->name }}

@endforeach

在我上面的代码中,它正在工作。但是对id的引用并不是我所需要的。

我需要使用where条件。像这样:

$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 :(得分:1)

尝试使用->first()代替->get()

答案 1 :(得分:1)

因为->get()检索了多个符合查询条件的结果。

您可以循环浏览$foo个结果,也可以使用->first()检索第一个查询匹配项。

答案 2 :(得分:1)

findOrFail()方法返回“模型”的实例。 即使只有一个结果,get()方法也会返回“模型”实例的集合。

如果只需要一个结果,请使用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