Zend\Db\ResultSet\ResultSet
O ResultSet é a classe que servirá de container para o resultado da execução de um Statement. À partir dessa classe será possível fazer um laço e ir retirando os resultados um a um.
Um objeto de ResultSet só pode passar uma vez em um laço, lembrando uma fita cassete que necessita de ser manualmente retornada ao seu inicio. No caso do ResultSet temos o método buffer() faz esse retorno.
Podemos imaginar o ResultSet como um objeto container de objetos chamados ArrayObject que são as linhas do banco e que por sua vez contém valor de cada coluna naquela linha. Vamos imaginar uma tabela do banco de dados:
id
|
nome
|
preco
|
0
|
Relógio
|
10.00
|
1
|
Calça Jeans
|
50.00
|
Se fizéssemos uma busca nessa tabela o ResultSet teriam internamente dois ArrayObject, que por sua vez teriam valores de cada uma das três colunas.
foreach($resultSet as $arrayObject) {
echo $arrayObject->id;
echo $arrayObject->nome;
echo $arrayObject->preco;
}
|
Saída:
0
Relógio
10.00
1
Calça Jeans
50.00
|
Quando trabalhamos com POO, seria interessante que ao invés de conter ArrayObjects dentro de um ResultSet, conter vários objetos da entidade Produto. As linhas de código abaixo mudam os objetos internos ao objeto de ResultSet e no caso passaríamos a capturar os elementos via GET.
$resultado = $statement->execute();
$resultSet = new ResultSet();
$resultSet->setArrayObjectPrototype(new Entidade\Produto());
$resultSet->initialize($resultado);
|
O que acontece é que para por os valores da coluna id, por exemplo, o ResultSet irá procurar um método setId() em Produto. Então, no laço trabalharíamos assim:
foreach($resultSet as $produto) {
echo $produto>getId();
echo $produto>getNome();
echo $produto>getPreco();
}
|
Saída:
0
Relógio
10.00
1
Calça Jeans
50.00
|