Utilizando Having e Subquery no Cakephp 2.x

Posted on by : admin Tags:

Utilizando Having e Subquery no Cakephp 2.x

 

Na Criação do cakephp muita das vezes precisando utilizar técnicas diferenciadas, e abaixo estarei mostrando como utilizar o Having e subquery  no formato das criações de busca do cakephp .

HAVING
Primeiramente sabe para que serve o having em uma query? 

O having você consegue filtrar a querie igualmente ao where após um agrupamento dos dados.
Para fazer isso no cakephp você deve integrar o having no mesmo atributo do group, pois o cakephp não tem um atributo próprio para o having.

$rows = $this->CLASS->find(‘all’, array(‘conditions’=>array(),
‘fields’ => ‘cod_teste, count(cod_beneficio) as count_teste’
‘group’=>array(‘cod_teste HAVING count_teste= 0‘)));

Formato de sql ficaria:
select cod_teste, count(cod_beneficio) as count_teste
      from CLASS
      group by cod_teste
      having count_teste = 0;

 

SUBQUERY

Agora a query abaixo mostra como colocar subquery no cakephp, mas lembrando, temos que para a query externa se comunicar com a subquery, devemos colocar a tabela principal dentro, que o cake chama como nome da Class do find.
Esta query abaixo vai contar a quantidade de códigos que tem em outra tabela.

$rows = $this->CLASS->find(‘all’,
array(‘conditions’=>array(),
‘fields’ => ‘CLASS.cod_teste,
(SELECT count(cod_teste)  FROM teste2 WHERE cod_teste = CLASS.cod_teste ) as count_teste2
));

Formato de sql ficaria:
select cod_teste, (SELECT count(cod_teste)  FROM  teste2 WHERE  cod_teste = CLASS.cod_teste ) as count_teste2

      from CLASS;

 

Se quiser, você poderia dar um having na count_teste2 para buscar por exemplo quem não existe na tabela teste2 somente os que retornam Zero (0) 

 

Reference havinghttps://stackoverflow.com/questions/7747656/cakephp-how-can-i-use-a-having-operation-when-building-queries-with-find-meth