Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

ErrorException (E_NOTICE) Trying to get property 'nome' of non-object

<?php namespace App\Http\Controllers;

use DB;

class ProdutoController extends Controller {

    public function lista(){
        $produtos = DB::select('select * from produtos');
        return view('listagem')->with('produtos', $produtos);
    }
    public function mostra(){
        $produto = DB::select('select * from produtos where id = ?', [1]);
        return view('detalhes')->with('produto', $produto);
    }
}

==========================================================
<html>
  <head>
    <link href="/css/app.css" rel="stylesheet">
    <title>Controle de estoque</title>
  </head>
  <body>
<h1>Detalhes do produto: <?= $produto->nome ?> </h1>
<ul>
  <li>
    <b>Valor:</b> R$ <?= $produto->valor ?> 
  </li>
  <li>
    <b>Descrição:</b> <?= $produto->descricao ?> 
  </li>
  <li>
    <b>Quantidade em estoque:</b> <?= $produto->quantidade ?>
  </li>
</ul>
</body>
</html>

=======================================================

<html>
  <head>
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.9/css/solid.css" integrity="sha384-29Ax2Ao1SMo9Pz5CxU1KMYy+aRLHmOu6hJKgWiViCYpz3f9egAJNwjnKGgr+BXDN" crossorigin="anonymous">
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.9/css/fontawesome.css" integrity="sha384-Lyz+8VfV0lv38W729WFAmn77iH5OSroyONnUva4+gYaQTic3iI2fnUKtDSpbVf0J" crossorigin="anonymous">
    <link href="/css/app.css" rel="stylesheet">
    <title>Controle de estoque</title>
  </head>
  <body>
    <h1>Listagem de produtos</h1>
    <table class="table">
      <?php foreach ($produtos as $p): ?>
      <tr>
        <td><?= $p->nome ?></td>
        <td><?= $p->valor ?></td>
        <td><?= $p->descricao ?></td>
        <td><?= $p->quantidade ?></td>
        <td>
            <a href="/produtos/mostra">
              <i class="fas fa-search"></i>
            </a>
        </td>
      </tr>
      <?php endforeach ?>
    </table>
  </body>

</html>

=======================================================

Route::get('/produtos', 'ProdutoController@lista');
Route::get('/produtos/mostra', 'ProdutoController@mostra');

========================================================

'Listagem de produtos' está funcionando, enquanto 'Detalhes' apresenta esse erro.

1 resposta
solução!

Oi Eduardo, tudo bom?

O erro indica, muito provavelmente, essa linha aqui:

<h1>Detalhes do produto: <?= $produto->nome ?> </h1>

Isso significa que o produto que chegou nessa view não pe um objeto. Como esse produto veio do banco de dados:

        $produto = DB::select('select * from produtos where id = ?', [1]);

E o método utilizado foi o select, acredito que o retorno esteja sendo um array, com um produto só. Tenta verificar o que tem dentro desse produto que a gente ta mandando pra view. Talvez te de uma luz:

public function mostra(){
        $produto = DB::select('select * from produtos where id = ?', [1]);
    print_r($produto);die();
        return view('detalhes')->with('produto', $produto);
    }

Abraço!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software