1
resposta

Não consigo acessar a propriedade de um objeto

Olá gelera, boa tarde!

Eu tenho o seguinte erro:

Trying to get property of non-object (View: C:\Users\Kaiser\Desktop\laravel\estoque\resources\views\produtos\listagem.blade.php)

No meu listagem está assim:

@foreach ($laravel as $p)
            <table class="table table-hover">
                <tr class="{{ $p->quantidade <=1 ? 'bg-danger' : ''}}">        
                    <td class="col-md-4"> {{$p->nome}} </td>
                    <td class="col-md-2"> {{$p->valor}} </td>
                    <td class="col-md-2"> {{$p->descricao}} </td>
                    <td class="col-md-2"> {{$p->quantidade}} </td>
                    <td class="col-md-2"> {{$p->tamanho}} </td>
                    <td class="col-md-2"> {{$p->categoria->nome}} </td>// ESTA LINHA
                    <td>
//... continua. código omitido

Se eu tentar pegar só $p->categoria dá certo, mas tentando pegar o nome eu obtenho erro. E obviamente eu pegando a categoria inteira recebo um array não sendo essa minha intenção.

No meu controller o método lista está assim:

public function lista(){
        $laravel = laravel::all();
        return view('produtos.listagem')->with('laravel', $laravel);
  }

Lembrando também que o 'categoria' não pertence a mesma tabela do 'laravel', tem a sua própria.

Os meus models estão da seguinte forma:


use Illuminate\Database\Eloquent\Model;

class laravel extends Model {

    protected $table = 'laravel';
    public $timestamps = false; // Não quero marcação de tempo
    protected $fillable = array('nome', 'descricao', 'quantidade', 'valor', 'tamanho', 'categoria_id');  // categoria foi adicionado aqui <-
    protected $guarded = ['id', 'created_at', 'update_at'];// ??? o que isso faz
    //protected $fillablee = array('nome');
    public function categoria(){
        return $this->belongsTo('estoque\Categoria'); // E declarado aqui como pertencente
    }

}

Model do Categoria:

<?php namespace estoque;

use Illuminate\Database\Eloquent\Model;

class Categoria extends Model {

    public function produtos (){
         $this->hasMany('estoque\laravel');
    }

}

Eu não sei ao certo o porque está acontecendo esse erro e se alguém puder me ajudar eu ficaria muito agradecido.

1 resposta

Oi Kevin,

Se não me engano você precisa indicar que a consulta deve carregar também a categoria:

$laravel = Laravel::with('categoria')->get();

Veja se assim resolve.