Laravel /无法访问受保护的属性Illuminate \ Database \ Eloquent \ Collection :: $ items

时间:2016-05-02 10:57:35

标签: php arrays laravel collections eloquent

我还在学习Laravel,而且我正在使用雄辩来运行我的查询。在我的应用程序中,用户可以属于一个圈子。圆圈包含存储库,而存储库又包含项目。我试图在一个圆圈内获取属于各种存储库的所有项目。

用户模型:

public function circle () {
  return $this->belongsTo('App\Models\Circle');
}

圈子模型:

public function users () {
  return $this->hasMany('App\Models\User');
}

public function repositories () {
  return $this->hasMany('App\Models\Repository');
}

存储库模型:

public function items () {
  return $this->hasMany('App\Models\Item');
}

public function circle () {
  return $this->belongsTo('App\Models\Circle');
}

物品型号:

public function repository () {
  return $this->belongsTo('App\Models\Repository');
}

以下是我试图迭代所有项目的标记:

  @foreach($items as $item)
      <span>{{ $item->name }}</span>
  @endforeach

负责处理路线的我的控制器在这里:

function library () {
  $user = Auth::user();
  $circle = $user->circle;
  $repositories = $circle->repositories;
  $items = $repositories->items;
  return View('pages.library', compact(['user', 'circle', 'items']));
}

截至目前,我可以检索属于某个圆圈的2个存储库,但我无法检索属于这2个存储库的多个项目。我已经在存储库上尝试了@foreach来运行这两个并将项目推送到一个空数组但我最终只得到了最后一项。是否有我缺少的查询技巧/步骤?

1 个答案:

答案 0 :(得分:4)

$repositories是一个集合而非模型。所以你不应该调用$items属性,因为它受到保护。

我知道您正在寻找项目关系,所以......您需要对$repositories以及每个$repository $项目进行迭代,例如:

@foreach($repositories as $repository)
    @foreach($repository->items as $item)
        <span>{{ $item->name }}</span>
    @endforeach
@endforeach

从控制器中删除它:

$items = $repositories->items;