Laravel/无法访问受保护的属性IlluminateDatabaseEloquentCollection


Laravel / Cannot access protected property IlluminateDatabaseEloquentCollection::$items

我仍在学习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']));
}

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

$repositories是一个集合而非模型。因此,您不应该将$items属性称为promit,因为它受到保护。

我知道你在寻找项目关系,所以…你需要在$repositories和每个$repository$项目上提交,比如:

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

并将其从控制器中删除:

$items = $repositories->items;