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

Objeto vazio quando instancio classe e faço consulta no PHP com PDO e MySql

Boa tarde

Tenho uma classe Conecta() que faz minha conexão com o banco de dados, e uma classe modelo que no meu caso cliente instancio os dados do cliente e faço os métodos de persistência, no método read() faço coneão com banco executo a query e retorno ela, mas quando instancio a classe na minha tela onde vou mostrar os dados e chamo o método, ele passa um objeto vazio para ela, não sei onde estou errando. Segue o código.

Método classe Cliente

private $con;

    public function __construct(){
        $this->con = new Conecta();
    }

public function read(){
        try {
            $stmt = $this->con->conectar()->query("SELECT * FROM clientes");
            $lista = $stmt->fetchAll();
            return $lista;
        } catch (Exception $e) {
            print "Ocorreu um erro ao tentar Buscar Todos." . $e;
        }
    }

Código da página onde chamo esse método

include 'src/classes/Cliente.php';

$cliente = new Cliente();
$cliente->read();

foreach ($cliente as $listCliente){
    echo $listCliente['nome'];
}

Quando uso o var_dump() para ver o conteúdo da variável ele mostra um objeto vazio.

Desde já agradeço!

1 resposta
solução!

Olá, Vinicius!

Gostaria de pedir desculpas pela demora em responder o seu tópico.

Pelo código que você compartilhou, parece que o problema está na forma como você está chamando o método read() da classe Cliente.

Ao chamar o método read(), você está retornando a lista de clientes, mas não está armazenando esse retorno em nenhuma variável. Por isso, quando você faz o loop foreach em $cliente, ele está vazio.

Para corrigir isso, você pode atribuir o retorno do método read() a uma variável e, em seguida, fazer o loop nessa variável. Por exemplo:

$cliente = new Cliente();
$listaClientes = $cliente->read();

foreach ($listaClientes as $listCliente){
    echo $listCliente['nome'];
}

Dessa forma, a variável $listaClientes irá armazenar a lista de clientes retornada pelo método read(), e você poderá percorrê-la corretamente no loop foreach.

Espero ter ajudado, bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓