Error while displaying Laravel Relationship data

Asked

Viewed 76 times

0

Gentlemen, I am creating a relationship between 3 tables, the product that takes category values and sessions, but this always returning me the following error:

Trying to get Property of non-object (View: /var/www/html/autopecas/Resources/views/admin/products/listar.blade.php)

My Model

Products

...
use Illuminate\Database\Eloquent\Model;
use App\Models\Categorias;
use App\Models\Sessoes;
class Produtos extends Model
{
protected $table = "produtos" ;

protected $fillable = [
    'categoria_id','sessao_id','nome','descricao', 'codigo', 'codigo_loja', 'imagem', 'preco', 'status'
];

public function categoria() 
{
    return $this->belongsTo('App\Models\Categorias', 'categoria_id', 'id');
}

public function sessao()
{
    return $this->belongsTo(Sessoes::class, 'sessao_id');
}
}

Sessoes

...
use Illuminate\Database\Eloquent\Model;
use App\Models\Categorias;
class Sessoes extends Model
{
protected $table = "sessoes" ;

protected $fillable = [
    'categoria_id','nome'
];

public function cate() 
{
    return $this->belongsTo(Categorias::class, 'categoria_id');
}

Categories

use Illuminate\Database\Eloquent\Model;
use App\Models\Sessoes;
class Categorias extends Model
{
protected $table = "categorias" ;

protected $fillable = [
    'nome','status'
];

public function cate() 
{
    return $this->hasMany(Categorias::class);
}
}

Productoscontroller

... 
use App\Models\Categorias;
use App\Models\Sessoes;
use App\Models\Produtos;
...

public function listarSessoes()
{

    $produtos = Produtos::select()->with('categoria')->with('sessao')->get();

    return view('admin.produtos.listar', compact('produtos'));
}

listar.blade.php

@foreach($produtos as $produto)
              <tr>
                <td>{{$produto->id}}</td>
                <td>{{$produto->nome}}</td>
                <td>{{$produto->categoria->nome[1]}}</td>
                <td> @if($produto->status == 'ativo')
                      <span class="label label-success">{{$produto->status}}</span>
                     @else
                      <span class="label label-danger">{{$produto->status}}</span>
                     @endif
                </td>

                <td>{{$produto->created_at }}</td>

                <td>
                  <a href="{{route('admin.produtos.editar', $produto->id)}}" title="Editar"><i class="fa fa-pencil-square" aria-hidden="true"></i></a> 
                  | 
                  <a href="{{route('admin.produtos.excluir', $produto->id)}}" class="item" title="Excluir"><i class="fa fa-trash" aria-hidden="true"></i></a>
                </td>
              </tr>
            @endforeach

Where am I going wrong?

Thanks in advance!

  • To avoid leaving long discussions in the comments; your conversation was moved to the chat, if you want to proceed just click on the link

1 answer

1

Solution was to change the field of return of Model Products

public Function categoria() { Return $this->belongsTo('App Models Categories', 'categoria_id', 'id'); }

Browser other questions tagged

You are not signed in. Login or sign up in order to post.