Eu não estou conseguindo fazer o relacionamento, o erro que da é:
Trying to get property of non-object
Mudei algumas coisa que considero insignificativas do código que ele usou. O professor criou a tabela pela migration e eu fiz no próprio banco já inserindo a chave estrangeira, além dele usar como o id da categoria na tabela produtos: categoria_id, eu inverti: id_categoria. O resto esta igual, não sei por que não funciona. Segue os códigos:
Listagem:
@foreach($produtos as $p)
<tr class="{{$p->quantidade <= 1 ? 'danger' : ''}}">
<td><?=$p->nome?></td>
<td><?=$p->valor?></td>
<td><?=$p->descricao = $p->descricao != null ? $p->descricao : '<hr>'?></td>
<td><?=$p->quantidade?></td>
<td><?=$p->tamanho = $p->tamanho != null ? $p->tamanho : '<hr>'?></td>
<td><?=$p->categoria->id?></td>
<td>
<a href="{{action('ProdutoController@mostra', $p->id)}}">
<span class="glyphicon glyphicon-search" aria-hidden="true"></span>
</a>
</td>
<td>
<a href="{{action('ProdutoController@altera', $p->id)}}">
<span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>
</a>
</td>
<td>
<a href="{{action('ProdutoController@remove', $p->id)}}">
<span class="glyphicon glyphicon-trash" aria-hidden="true"></span>
</a>
</td>
</tr>
@endforeach
Produto
class Produto extends Model
{
protected $table = 'produtos';
public $timestamps = false;
protected $fillable = array('nome', 'valor', 'descricao', 'quantidade', 'tamanho', 'id_categoria');
protected $guarded = ['id'];
public function categoria(){
return $this->belongsTo('estoque\Categoria');
}
}
Categoria
class Categoria extends Model
{
public function produtos(){
return $this->hasMany('estoque\Produto');
}
}
Controller
public function lista(){
$produtos = Produto::all();
return view('produto.listagem')->with('produtos', $produtos);
}