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

Problema com relacionamento many to one error Undefined property: stdClass::$categoria

Salve. No capitulo 5 da segunda da parte do curso de Laravel é encarado realcionamentos entre models. Li a doc de laravel varias vezes e não estou encontrando o erro tonto, mas ele persiste. Estou acreditando que trata-se de alguma convençao interna do core para nomear colunas da tabela. Com php puro ou CodeIgniter não tinha estes beneficios, mas também nao tinha estes problemas, salve CodeIgniter.

Voltando ao Problema. o banco estoque tem - a tabela categorias (id,nome, timestamps) - a tabela produto (* campos, categoria_id)

Meu sistema, conforme os excerciços deveria conseguir puxar na view <td> {{ $p->categoria->nome}}</td> gracas ao relacionamento. Em lugar disso o framework de banco nao consegue relacionar ambos campos. segue todas as telas, se alguem ja passou por isto ... me de um help

<?php namespace estoque;

use Illuminate\Database\Eloquent\Model;


class Produto extends Model {

    //protected $table = 'produtos';
    public $timestamps = false;
    protected $fillable= array('nome','categoria_id','valor','descricao','quantidade','tamanho');

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

}
<?php namespace estoque;

use Illuminate\Database\Eloquent\Model;


class Categoria extends Model {

    public $timestamps = false;
    protected $fillable= array('nome');
    public function produtos(){
        return $this->hasMany('estoque\Produto');
}

}

na view

@foreach($produtos as $p)
                    <tr class="{{ $p->quantidade <=1 ? 'danger' : '' }}">
                        <td> {{ $p->nome }}</td>
                        <td> {{ $p->categoria->nome}}</td>
                        <td> {{ $p->valor }}</td>
                        <td> {{ $p->descricao }}</td>
                        <td> {{ $p->quantidade }}</td>
                        <td> {{ $p->tamanho }}</td>

                        <td>
                            <a href="/produtos/mostra/{{$p->id}}">
                                <i class="material-icons">delete</i>
                            </a>
                        </td>
                        <td>
                            <a href="/produtos/remove/{{$p->id}}">
                               <i class="material-icons">visibility</i>
                            </a>
                        </td>
                    </tr>
                    @endforeach
tabela categorias campos (id, nome)
tabela produtos campos (id,nome, categoria_id,valor, descricao,quantidade,tamanho)
3 respostas
solução!

Oi Gustavo, tudo bem? Cola o controller que carrega a listagem do banco e retorna a view aqui pra gente ver? Estou achando que esse não é um problema no relacionamento em si, mas sim no lazy load dos dados.

Fala prezado Wanderson, vc estava certo, o erro era simplesmente que tinha um paginate(10), quando troquei para usar o query builder do ORM esqueci de atualizar isto. agora esta , vlw
assim e funcionando

===ESTAVA ASSIM ANTES=====
public function lista(){

        // $produtos = Produto::all()->paginate(10);
        $produtos = Produto::all();
        return view('produto.listagem')->with('produtos', $produtos);
    }

Boa Gustavo!