Limitar a busca de Imagens?

7 respostas Resolvido
php
S

Agradeceria me ajudarem a limitar o resultado a ser exibido de imagens que a query faz no BD.

Tenho este código html que deverá exibir somente 3 imagens:

<div class="section">
       <div class="container">
           <h2 class="section-title">Estes Você Não Pode Perder!</h2>
           <div class="row">
                <div class="col-md-4">
                <?php 
            $dao=new produtoDAO($conexao);
            $produtos = $dao->pegaDestaques();
            foreach($produtos as $produto) : 
            ?>
               
                    <div class="card card-product card-plain">
                    
                        <div class="image">
                           <a href="precompra.php?id=<?=$produto->getId()?>">
                                <img src="../cadastro/fotos/<?=$produto->getFoto() ?>" width="235px" height="245px" alt="foto"/>
                            </a>
                        </div>
                        <div class="content">
                            <a href="#">
                                <h4 class="title"><?=$produto->getMarca()->getNome() ?></h4>
                            </a>
                            <p class="description">
                               <?=$produto->getDescricao() ?>
                            </p>
                            <div class="footer">
                                <span class="price price-old"> R&dollar;<?=$produto->getPreco() ?></span>
                                <span class="price price-new">R&dollar;<?= $produto->calculaDesconto() ?></span>
                             </div>
                        </div>
                        
                    </div> <!-- end card -->
                  <?php endforeach ?>
                 </div>
               </div>
           </div>
       </div>
</div><!-- section -->

e este é a função que busca as fotos escolhidas mas tenho que restringir porque o usuário poderá sem querer escolher mais de 3 fotos:

function pegaDestaques() {
    $produtos = array();
    $resultado = mysqli_query($this->conexao, "select p.*, c.nome as categoria_nome, sc.nome as 
    subcategoria_nome, m.nome as marca_nome 
    from produtos p 
     inner join categorias c on(p.categoria_id = c.id)
    inner join subcategorias sc on(p.subcategoria_id = sc.id)
inner join marcas m on(p.marca_id = m.id) LIMIT 3 WHERE destaque = 1 ");

 while($array = mysqli_fetch_assoc($resultado)) {
 $produto = new Produto();

$produto->setId($array['id']);
$produto->setNome($array['nome']);
$produto->setPreco($array['preco']);
$produto->setCodigo($array['codigo']);
$produto->setReferencia($array['referencia']);
$produto->setPeso($array['peso']);
$produto->setMedida($array['medida']);
$produto->setNcm($array['ncm']);
$produto->setDescricao($array['descricao']);
$produto->setMarca(new Marca());
$produto->getMarca()->setId($array['marca_id']);
$produto->getmarca()->setNome($array['marca_nome']);
$produto->setCategoria(new Categoria());
$produto->getCategoria()->setId($array['categoria_id']);
$produto->getCategoria()->setNome($array['categoria_nome']);
$produto->setSubcategoria(new Subcategoria());
$produto->getSubcategoria()->setId($array['subcategoria_id']);
$produto->getSubcategoria()->setNome($array['subcategoria_nome']);
$produto->setDestaque($array['destaque']);
$produto->setQuantidade($array['quantidade']);
$produto->carregaCaminhoFoto($array['foto']);

array_push($produtos, $produto);
}
return $produtos;
}

7 Respostas

W

Boa noite jovem!
Não compreendi direito a sua dúvida, pois o limite ja está determinado na sua query. LIMIT 3.

S

Obrigado Wallace, pois é, eu fiz isso acreditando que era isso que resolveria o problema, mas mesmo assim o retorno da query não está limitando a 3 a exibição das fotos. Se eu marcar 4 fotos ou mais no setDestaque ele exibe mais que 3 fotos.

Onde estou errando?

W
Solucao aceita

Desculpe @Sergio_Guerjik falha minha! Ao ver seu código não percebi um erro de sintaxe na query.
Troque > LIMIT 3 WHERE destaque = 1 por > WHERE destaque = 1 LIMIT 3
Espero ter ajudado, abraço!

PS: Aqui vai uma dica! Para seu código não ficar tão extenso assim com os métodos
$produto->setName | $produto->setPreco etc…
Utilize o método construtor, o código fica mais limpo.
Ex:
> $produto = new Produto($array['id'], $array['nome'], $array['preco'], (etc ....));

S

Obrigado Wallace, isso mesmo funcionou.

Vou alterar o meu método utilizando o construtor. Valeu a dica!

Abraços!!!

J

ou um método privado, como,

private Produto createProduto(Ponteiro ponteiro){
        produto->setId(ponteiro['id']);
        produto->setNome(ponteiro['nome']);
    }
W

Amigo o Sergio está utilizando a linguagem PHP e não java rsrs…
Além de que esse método privado que você sugeriu não muda nada, continua com o mesmo bloco desnecessário.

J

Sim, mas você tem que avaliar com objetivo. No caso o construtor só é feito se queremos obrigar ao programador que instanciar o objeto a setar os atributos antes. Se não houver essa necessidade, cria métodos privado seria ideal, o beneficio é em deixar o código mais legível.
É uma dica de arquitetura que não se aplica somente á este contexto, englobando em qualquer linguagem, a sintaxe só foi de exemplo, pois não sei como se aplica em PHP, porém presumo que se utilize de cursores.

Criado 27 de maio de 2017
Ultima resposta 28 de mai. de 2017
Respostas 7
Participantes 3