Laravel嵌套关系foreach循环

时间:2016-02-28 03:27:31

标签: php laravel laravel-5 nested relationship

我在项目和剧集之间有关系

项:

public function episodes()
    {
        return $this->hasMany(episode::class);
    }

情节:

public function item()
        {
            return $this->belongsTo(item::class);
        }

在控制器中

$latestanimes = DB::table('episodes')->where('category', 'anime')
            ->orderBy('created_at', 'desc')
            ->take(5)
            ->get();

我想要做的是获得每集的动画片名称

                       @foreach($latestanimes as $episode)
                              <tr>
                                <td>
                                    @foreach($episode->item as $parrent)
                                      {{  $parrent->title; }}
                                    @endforeach
                                </td>
                                <td>{{ $episode->number }}</td>
                                <td>{{ $episode->category }}</td>
                            </tr>
                        @endforeach

这给了我“Undefined property:stdClass :: $ item”

我尝试在routes.php中调试

Route::get('/dd/{id}', function($id){

        $episode=App\episode::find($id);
        echo $episode->name. '<hr>';

        $item=$episode->item;
        echo $item->title;

    });

这有效...... 有没有办法直接访问它?像

{{ $episode->item->title }}

提前

2 个答案:

答案 0 :(得分:0)

您的代码中的某些问题是您正在编写的剧集模型属于这意味着剧集只有一个项目会导致foreach循环无法正常工作。

答案 1 :(得分:0)

修正了它。我正在使用DB直接使用查询构建器,这不是雄辩的。

  $latestanimes = episode::with('item')  //eager loading, thanks lagbox
            ->where('category', 'anime')
            ->orderBy('created_at', 'desc')
            ->take(5)
            ->get();

我可以直接访问我想要的第一个地方

{{$episode->item->title}}