Doubt to level array after consulting SQL with Eloquent

Asked

Viewed 35 times

1

Hey, guys, I put together the following code:

    $concat = array();
    $products_categories = array();

    $departament = $request->getParsedBodyParam('departamento');
    $categories = $request->getParsedBodyParam('categorias');

    foreach ($categories as $category) {
        $temp = $departament . '.' . $category;

        array_push($concat, $temp);
    }

In it, I take the parameters coming from the POST to concatenate the department with the category and group in my array_push. Example: I receive via POST the JSON

{
    "departamento": 1,
    "categorias": ["4", "5", "6"]
}

And after my array_push mount a new array ($Concat) containing:

[
    "1.4",
    "1.5",
    "1.6"
]

After that, I perform a foreach on my $Concat variable to perform SQL and return to $Response:

    foreach ($concat as $c) {
        $products = Product::select('id', 'nome', 'preco', 'preco_promocional', 'descricao', 'peso', 'dimensoes', 'departamento')
        ->where('departamento', 'LIKE', '%' . $c . '%')->get();

        array_push($products_categories, $products);
    }

    return $response->withJson($products_categories);

What is occurring is that it is assembling an array that has two levels and not just a single level as I can level and leave all products on the first level?

Example of the current answer:

[
    [
        {
            "id": 1062,
            "nome": "Bloquinho Amigos São Que Nem Estrelas. - BN-001",
            "preco": 2.75,
            "preco_promocional": 0,
            "descricao": "<p><strong>Especifica&ccedil;&otilde;es do produto</strong></p>\r\n\r\n<p>Tamanho: 8x12cm<br />\r\nPapel Capa Triplex 390<br />\r\nPapel interior Couche 115<br />\r\nQuantidade: 5 unidades<br />\r\nPeso: 170g</p>\r\n",
            "peso": 30,
            "dimensoes": "[\"8\",\"13\",\"0,5\"]",
            "departamento": "[\"6.64\",\"3.18\",\"1.4\",\"4.44\"]"
        },
        {
            "id": 1063,
            "nome": "Bloquinho A Verdadeira Amizade é uma Grande Benção. - BN-002",
            "preco": 2.75,
            "preco_promocional": 0,
            "descricao": "<p><strong>Especifica&ccedil;&otilde;es do produto</strong></p>\r\n\r\n<p>Tamanho: 8x12cm<br />\r\nPapel Capa Triplex 390<br />\r\nPapel interior Couche 115<br />\r\nQuantidade: 5 unidades<br />\r\nPeso: 170g<br />\r\n&nbsp;</p>\r\n",
            "peso": 30,
            "dimensoes": "[\"8\",\"13\",\"0.5\"]",
            "departamento": "[\"6.64\",\"3.18\",\"1.4\",\"4.44\"]"
        }
    ],
    [
        {
            "id": 5,
            "nome": "Cartão Amizade Coloque sua esperança em Deus - M-524",
            "preco": 3.37,
            "preco_promocional": 0,
            "descricao": "<p><br />\r\n<strong>Mensagem</strong></p>\r\n\r\n<p>O tempo de Deus &eacute; perfeito: ele nunca atrasa, mesmo quando as coisas parecem fora de controle, Deus ainda est&aacute; trabalhando e tem um plano aben&ccedil;oado para a sua vida. Coloque sua esperan&ccedil;a em Deus e conte com a minha amizade.&nbsp;</p>\r\n\r\n<p><strong>Especifica&ccedil;&otilde;es do produto</strong></p>\r\n\r\n<p>Papel: Triplex 290g<br />\r\nAcabamento: Verniz e Glitter<br />\r\nTamanho com Envelope na Embalagem: 17cm x 13cm x 2cm<br />\r\nTamanho Aberto: 15cm x 21cm&nbsp;<br />\r\nTamanho Fechado: 15 cm x 10,5cm&nbsp;<br />\r\nPeso: 90g<br />\r\nQuantidade: 6 unidades&nbsp;</p>\r\n",
            "peso": 15,
            "dimensoes": "[\"13\",\"17\",\"0.33\"]",
            "departamento": "[\"6.65\",\"7.74\",\"3.21\",\"1.5\",\"4.47\"]"
        }
    ],
    [
        {
            "id": 622,
            "nome": "Cartão love is in the air - H-055 ",
            "preco": 3.95,
            "preco_promocional": 3.37,
            "descricao": "<p><strong>Mensagem</strong><br />\r\nEu n&atilde;o posso prever o futuro, nem tenho bola de cristal e, muito menos, sei ler a palma da m&atilde;o. Mas eu tenho certeza de que sempre vou estar aqui: &nbsp;te amando, cuidando de ti, te desejando e te fazendo &nbsp;muito feliz. Para sempre!</p>\r\n\r\n<p><br />\r\n<strong>Especifica&ccedil;&otilde;es do produto</strong></p>\r\n\r\n<p>Papel: Triplex 290g<br />\r\nAcabamento: Hotstamp<br />\r\nTamanho com Envelope na Embalagem: 20cm x 14cm x 2cm<br />\r\nTamanho Aberto: 18,5cm x 24cm<br />\r\nTamanho Fechado: 18,5cm x 12cm<br />\r\nQuantidade: 6 unidades<br />\r\nPeso: 156g<br />\r\n&nbsp;</p>\r\n",
            "peso": 26,
            "dimensoes": "[\"14\",\"20\",\"2\"]",
            "departamento": "[\"6.65\",\"7.74\",\"3.21\",\"1.6\"]"
        }
    ]
]

Expected example:

[
    {
        "id": 1062,
        "nome": "Bloquinho Amigos São Que Nem Estrelas. - BN-001",
        "preco": 2.75,
        "preco_promocional": 0,
        "descricao": "<p><strong>Especifica&ccedil;&otilde;es do produto</strong></p>\r\n\r\n<p>Tamanho: 8x12cm<br />\r\nPapel Capa Triplex 390<br />\r\nPapel interior Couche 115<br />\r\nQuantidade: 5 unidades<br />\r\nPeso: 170g</p>\r\n",
        "peso": 30,
        "dimensoes": "[\"8\",\"13\",\"0,5\"]",
        "departamento": "[\"6.64\",\"3.18\",\"1.4\",\"4.44\"]"
    },
    {
        "id": 1063,
        "nome": "Bloquinho A Verdadeira Amizade é uma Grande Benção. - BN-002",
        "preco": 2.75,
        "preco_promocional": 0,
        "descricao": "<p><strong>Especifica&ccedil;&otilde;es do produto</strong></p>\r\n\r\n<p>Tamanho: 8x12cm<br />\r\nPapel Capa Triplex 390<br />\r\nPapel interior Couche 115<br />\r\nQuantidade: 5 unidades<br />\r\nPeso: 170g<br />\r\n&nbsp;</p>\r\n",
        "peso": 30,
        "dimensoes": "[\"8\",\"13\",\"0.5\"]",
        "departamento": "[\"6.64\",\"3.18\",\"1.4\",\"4.44\"]"
    },
    {
        "id": 5,
        "nome": "Cartão Amizade Coloque sua esperança em Deus - M-524",
        "preco": 3.37,
        "preco_promocional": 0,
        "descricao": "<p><br />\r\n<strong>Mensagem</strong></p>\r\n\r\n<p>O tempo de Deus &eacute; perfeito: ele nunca atrasa, mesmo quando as coisas parecem fora de controle, Deus ainda est&aacute; trabalhando e tem um plano aben&ccedil;oado para a sua vida. Coloque sua esperan&ccedil;a em Deus e conte com a minha amizade.&nbsp;</p>\r\n\r\n<p><strong>Especifica&ccedil;&otilde;es do produto</strong></p>\r\n\r\n<p>Papel: Triplex 290g<br />\r\nAcabamento: Verniz e Glitter<br />\r\nTamanho com Envelope na Embalagem: 17cm x 13cm x 2cm<br />\r\nTamanho Aberto: 15cm x 21cm&nbsp;<br />\r\nTamanho Fechado: 15 cm x 10,5cm&nbsp;<br />\r\nPeso: 90g<br />\r\nQuantidade: 6 unidades&nbsp;</p>\r\n",
        "peso": 15,
        "dimensoes": "[\"13\",\"17\",\"0.33\"]",
        "departamento": "[\"6.65\",\"7.74\",\"3.21\",\"1.5\",\"4.47\"]"
    },
    {
        "id": 622,
        "nome": "Cartão love is in the air - H-055 ",
        "preco": 3.95,
        "preco_promocional": 3.37,
        "descricao": "<p><strong>Mensagem</strong><br />\r\nEu n&atilde;o posso prever o futuro, nem tenho bola de cristal e, muito menos, sei ler a palma da m&atilde;o. Mas eu tenho certeza de que sempre vou estar aqui: &nbsp;te amando, cuidando de ti, te desejando e te fazendo &nbsp;muito feliz. Para sempre!</p>\r\n\r\n<p><br />\r\n<strong>Especifica&ccedil;&otilde;es do produto</strong></p>\r\n\r\n<p>Papel: Triplex 290g<br />\r\nAcabamento: Hotstamp<br />\r\nTamanho com Envelope na Embalagem: 20cm x 14cm x 2cm<br />\r\nTamanho Aberto: 18,5cm x 24cm<br />\r\nTamanho Fechado: 18,5cm x 12cm<br />\r\nQuantidade: 6 unidades<br />\r\nPeso: 156g<br />\r\n&nbsp;</p>\r\n",
        "peso": 26,
        "dimensoes": "[\"14\",\"20\",\"2\"]",
        "departamento": "[\"6.65\",\"7.74\",\"3.21\",\"1.6\"]"
    }
]

Thank you guys!

1 answer

0

I looked at Stackoverflow and Google and found the solution and put this answer to help if someone goes through something similar, well, I changed mine foreach $concat for:

    $products = Product::select('id', 'nome', 'preco', 'preco_promocional', 'descricao', 'peso', 'dimensoes', 'departamento');

    foreach ($concat as $c) {
        $products->orWhere('departamento', 'LIKE', '%' . $c . '%');
    }
    $result = $products->get();

    return $response->withJson(['products' => $result]);

Browser other questions tagged

You are not signed in. Login or sign up in order to post.