Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Erro nos relacionamentos: Trying to get property of non-object

listagem.blade.php

@extends('layout.principal')
@section('conteudo')

<h1>Listagem de produtos</h1>

<a href="/produtos/novo" class="btn btn-primary">Novo</a>

<table class="table">
    @if(empty($produtos))
        <div class="alert alert-danger">
            Nenhum produto encontrado
        </div>

    @else

    @foreach($produtos as $produto)
    <tr {{ $produto->quantidade <= 1 ? 'class=danger' : '' }}>
        <td> {{ $produto->nome }} </td>
        <td> {{ $produto->valor }} </td>
        <td> {{ $produto->descricao }} </td>
        <td> {{ $produto->quantidade }} </td>
        <td> {{ $produto->tamanho }}</td>
        <td> {{ $produto->categoria->nome }} </td>
        <td>
            <a href="/produtos/mostra/{{ $produto->id }}">
                <span class="glyphicon glyphicon-search"></span>
            </a>
        </td>
        <td>
            <a href="/produtos/remove/{{ $produto->id }}">
                <span class="glyphicon glyphicon-trash"></span>
            </a>
        </td>
    </tr>
    @endforeach
    @endif
</table>

@if(old('nome'))
<p class="bg-success">Produto {{ old('nome') }} adicionado com sucesso</p>
@endif

@stop

Categoria.php

<?php

namespace estoque;

use Illuminate\Database\Eloquent\Model;

class Categoria extends Model
{
    public function produtos(){
        return $this->hasMany('estoque\Produto');
    }
    //
}

Produto.php

<?php

namespace estoque;

use Illuminate\Database\Eloquent\Model;

class Produto extends Model
{
    protected $table = 'produtos';

    protected $fillable = ['nome', 'descricao', 'quantidade', 'valor', 'tamanho', 'categoria_id'];
    public $timestamps = false;

    public function categoria(){
        return $this->belongsTo('estoque\Categoria');
    }
}

Ao tentar acessar o relacionamento, eu recebo um erro de compilação da view, dizendo que eu estou tentando acessar propriedades de algo que não é um objeto.

5 respostas

Na classe categoria, não faltou passar o nome no $fillable?

Não, porque o $fillable é para descrever os campos que podem ser preenchidos por mass assignment na inserção :( Mas eu tentei mesmo assim e não mudou. No caso, eu só estou tentando pegar o relacionamento (o nome da categoria pelo id da mesma)

Ele pode ter mais de uma categoria? Tentou fazer algo do tipo

@foreach($produto->categoria as $cat)
    $cat->nome
@endforeach

Então, no caso, defini que cada produto pode ter apenas uma categoria. Amanhã dou mais uma olhada pra ver, tks

solução!

Descobri o problema. Havia colocado o nome errado da tabela no banco de dados. Era categoria_id, coloquei produto_id. Agora está tudo funcionando ok