Laravel / Não é possível acessar a propriedade protegida Illuminate \ Database \ Eloquent \ Collection :: $ items

Hafkamp

Ainda estou aprendendo o Laravel e estou usando o eloquent para executar minhas consultas. Em meu aplicativo, um usuário pode pertencer a um círculo. O círculo contém repositórios, que por sua vez contêm itens. Estou tentando obter todos os itens que pertencem a vários repositórios dentro de um círculo.

Modelo de usuário:

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

Modelo de círculo:

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

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

Modelo de Repositório:

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

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

Modelo de item:

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

Aqui está a marcação em que estou tentando iterar em todos os itens:

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

Meu controlador responsável por lidar com a rota está aqui:

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

A partir de agora, posso recuperar 2 repositórios pertencentes a um círculo, mas não posso recuperar os vários itens que pertencem a esses 2 repositórios. Eu tentei um @foreach nos repositórios para executar ambos e enviar os itens em uma matriz vazia, mas acabei apenas com o último item. Existe uma técnica / etapa de consulta que estou perdendo?

Filip Koblański

$repositoriesé uma coleção, não um modelo. Portanto, você não deve chamar a $itemspropriedade de prom porque está protegida.

Eu sei que você está procurando a relação de itens, então ... Você precisa iterar sobre $repositoriese sobre cada $repository$ item como:

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

E remova isso do controlador:

$items = $repositories->items;

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados