Identifiquei que não está acessando o método do atributo objeto $categoria conforme: $produto->getCategoria()->getNome(), fiz var_dump($produto) e retorna o produto com $categoria NULL porém $categoria->nome contém os valores, o que pode estar ocorrendo? Site https://loja2.kaiowadobrasil.com.br/produto-lista
código de produto-lista
<?php
require_once('logica-usuario.php');
require_once('cabecalho.php');
?>
<table class="table table-striped table-bordered">
<?php
$produtoDao = new ProdutoDao($conexao);
$produtos = $produtoDao->listaProdutos();
foreach($produtos as $produto):
?>
<tr>
<td><?= $produto->getNome() ?></td>
<td><?= $produto->getPreco() ?></td>
<td><?= $produto->precoComDesconto(0.1) ?></td>
<td><?= substr($produto->getDescricao(), 0, 40) ?></td>
<td><?= $produto->getUsado() ?></td>
<td><?= $produto->getCategoria()->getNome() ?></td>
<?php
if(usuarioEstaLogado()):
?>
<td>
<a class="btn btn-primary" href="/produto-altera-formulario?id=<?= $produto->getId() ?>">Alterar</a>
</td>
<td>
<form action="/remove-produto" method="post">
<input type="hidden" name="id" value="<?= $produto->getId() ?>" />
<button class="btn btn-danger">Remover</button>
</form>
</td>
<?php
endif;
?>
</tr>
<?php
endforeach;
?>
</table>
<?php
require_once("rodape.php");
?>
código de ProdutoDao
<?php
class ProdutoDao {
private $conexao;
function __construct($conexao){ $this->conexao = $conexao; }
function listaProdutos() { $produtos = array(); $resultado = mysqli_query($this->conexao, "select p.*, c.nome as categoria_nome from produtos as p join categorias as c on p.categoria_id = c.id");
while($produto_array = mysqli_fetch_assoc($resultado)) { $categoria = new Categoria(); $categoria->setNome($produto_array['categoria_nome']);
$nome = $produto_array['nome']; $preco = $produto_array['preco']; $descricao = $produto_array['descricao']; $usado = $produto_array['usado'];
$produto = new Produto($nome, $preco, $descricao, $categoria, $usado); $produto->setId($produto_array['id']);
array_push($produtos, $produto); } return $produtos; }
function insereProduto(Produto $produto) { $query = "insert into produtos (nome, preco, descricao, categoria_id, usado) values ('{$produto->getNome()}', {$produto->getPreco()}, '{$produto->getDescricao()}', {$produto->getCategoria()->getId()}, {$produto->getUsado()})"; return mysqli_query($this->conexao, $query); }
function alteraProduto(Produto $produto) { $query = "update produtos set nome = '{$produto->getNome()}', preco = {$produto->getPreco()}, descricao = '{$produto->getDescricao()}',categoria_id= {$produto->getCategoria()->getId()}, usado = {$produto->getUsado()} where id = '{$produto->getId()}'"; return mysqli_query($this->conexao, $query); }
function removeProduto($id) { $query = "delete from produtos where id = {$id}"; return mysqli_query($this->conexao, $query); }
function buscaProduto($id) { $query = "select * from produtos where id = {$id}"; $resultado = mysqli_query($this->conexao, $query); $produto_buscado = mysqli_fetch_assoc($resultado); $categoria = new Categoria(); $categoria->setId($produto_buscado['categoria_id']);
$nome = $produto_buscado['nome']; $preco = $produto_buscado['preco']; $descricao = $produto_buscado['descricao']; $usado = $produto_buscado['usado'];
$produto = new Produto($nome, $preco, $descricao, $categoria, $usado); $produto->setId($produto_buscado['id']);
return $produto; } }
?>