How to collect data from two queries in a php object?

1

I'm doing two DB queries on different tables. With the data from the first query I'm getting data in the other, however, I can not merge all the data into a json object only.

<?php
include_once("con.php");

$pdo = conectar();

$pegaContaAdmin=$pdo->prepare("SELECT * FROM contaPadrao");
$pegaContaAdmin->execute();

$return = array();

while ($linhaContaAdmin=$pegaContaAdmin->fetch(PDO::FETCH_ASSOC)) {

        $idcontaPadrao = $linhaContaAdmin['idcontaPadrao'];
        $contaPadrao = $linhaContaAdmin['contaPadrao'];
        $idsubcategoriaPadrao = $linhaContaAdmin['subcategoriaPadrao_idsubcategoriaPadrao'];

        $return[] = array(
                'idcontaPadrao' => $idcontaPadrao,
                'contaPadrao'   => $contaPadrao,
            );

    $pegaDadosSubcategoria=$pdo->prepare("SELECT * FROM subcategoriaPadrao 
                                          WHERE idsubcategoriaPadrao=:idsubcategoriaPadrao");
    $pegaDadosSubcategoria->bindValue("idsubcategoriaPadrao", $idsubcategoriaPadrao);
    $pegaDadosSubcategoria->execute();


    while ($linhaDadosSubcate=$pegaDadosSubcategoria->fetch(PDO::FETCH_ASSOC)) {

            $subcategoriaPadrao = utf8_encode($linhaDadosSubcate['subcategoriaPadrao']);
            $tipo = $linhaDadosSubcate['tipo'];

        }
}

$return['subcategoriaPadrao'] = $subcategoriaPadrao;
$return['tipo'] = $tipo;

echo json_encode($return);
?>
    
asked by anonymous 04.01.2017 / 17:01

1 answer

0

According to the messages in the comments, the problem may be that the while is not chained. To make things easier, I would also change the structure a bit.

First, it would only bring the required data:

$pegaContaAdmin = $pdo->prepare("SELECT idcontaPadrao , contaPadrao , subcategoriaPadrao_idsubcategoriaPadrao FROM contaPadrao");

As the idea is to return all the data, I would already use the PDO itself for this:

$return = $pegaContaAdmin->fetchAll(PDO::FETCH_ASSOC);
//nunca se esqueça de fechar o cursor, pode gerar problemas.
$pegaContaAdmin->closeCursor();

For subcategory data, instead of a while , I would use a foreach , inserting the data into the existing array:

//o prepare pode ser deixado do lado de fora do foreach, apenas a variável que conterá o bind mudará.
$pegaDadosSubcategoria = $pdo->prepare("SELECT subcategoriaPadrao , tipo FROM subcategoriaPadrao WHERE idsubcategoriaPadrao=:idsubcategoriaPadrao");

//sendo $row passada como referência para poder alterar o valor do array $return
foreach($return as &$row)
{
    $pegaDadosSubcategoria->bindValue("idsubcategoriaPadrao", $row['idsubcategoriaPadrao');
    $pegaDadosSubcategoria->execute();

    while ($linhaDadosSubcate = $pegaDadosSubcategoria->fetch(PDO::FETCH_ASSOC)) {
        //realiza o encode que já existe em seu código
        $linhaDadosSubcate['subcategoriaPadrao'] =  utf8_encode($linhaDadosSubcate['subcategoriaPadrao']);

        //cria uma lista de subcategorias dentro de cada registro da categoria padrão
        $row['subcategoria'][] = $linhaDadosSubcate;
    }
}

//nunca se esqueça de fechar o cursor, pode gerar problemas.
$pegaDadosSubcategoria->closeCursor();

After, just print

echo json_encode($return);

As we talked, I think this will solve your problems.

    
04.01.2017 / 17:51