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 .
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;
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 having: https://stackoverflow.com/questions/7747656/cakephp-how-can-i-use-a-having-operation-when-building-queries-with-find-meth