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

Trying to get property of non-object

Boa noite. Estou me deparando com o seguinte erro:

Trying to get property of non-object (View: /Users/adriano/Desktop/estoque/resources/views/produto/detalhes.blade.php)

Começou a aparecer quando organizei as views dentro dos diretórios de produto e layout.

detalhes.blade.php

@extends ('layout.principal')

@section ('conteudo')

    <h1>Detalhes do produto {{ $p->nome }}</h1>

    <ul>
        <li>
            <b>Valor: </b>{{ $p->valor }};
        </li>
        <li>
            <b>Descrição: </b>{{ $p->descricao }};
        </li>
        <li>
            <b>Estoque </b>{{ $p->quantidade }};
        </li>
    </ul>
@stop

produtoController.php

<?php namespace estoque\Http\Controllers;

use Illuminate\Support\Facades\DB;
use Request;

class ProdutoController extends Controller{

    public function lista(){        
        $produtos = DB::select('select * from produtos');

        return view('produto.listagem')->withProdutos($produtos);
    }

    public function mostra(){
        $id = Request::route('id');
        $produtos = DB::select('select * from produtos where id = ?', [$id]);
            if (empty($produtos)){
                return "Esse produtos não existe";
            }
        return view ('produto.detalhes')->withP ($produtos);
    }
}
?>

Valeu!!!

2 respostas
solução!

Oi Adriano, tudo bem? Se não me engano, o DB::select sempre vai te retornar um array com o resultado da query. O select não tem como saber pela string da consulta que vai retornar um objeto único. Então na view, você não pode simplesmente acessar a propriedade nome dessa forma {{p->nome}}

Uma forma é retornar o indice zero do array diretamente:

return view ('produto.detalhes')->withProdutos($produtos[0]);

Boa, deu certo. Estava esquecendo desse detalhe mesmo. Valeu Wanderson!!!