Você precisa que a tabela de grupos seja unida na consulta, sua consulta na pergunta não possui junções. Existem várias soluções simples.
Defina recursivo.
Recursivo é um controle muito grosseiro de quais junções e consultas são executadas, por padrão
find('list')
tem um valor recursivo de -1. -1 significa sem junções, razão pela qual não há junção na consulta resultante. Defini-lo com um valor de 0 adiciona uma junção à consulta principal para todas as associações hasOne e belongsTo.
Desconfie de usar/depender de recursividade, pois é muito fácil gerar consultas com junções que você não precisa - e/ou acionar muitas consultas subsequentes para dados relacionados (se definido com um valor maior que 0).
No entanto, este find chama:
$data = $this->Soya->find('list', array(
'fields'=> array('Soya.id','Soya.username'),
'recursive' => 0, // added
'conditions' => array(
'Grupo.categoria' => 'Soya' ,
'Grupo.subcategoria' => 'Productor de Oleaginosas'
)
));
Deve resultar nesta consulta (Se o modelo Soja tem uma associação pertence ao Grupo):
SELECT
"Soya"."id" AS "Soya__id",
"Soya"."username" AS "Soya__username"
FROM
"public"."users" as "Soya"
LEFT JOIN
"public"."Grupos" as "Grupo" on ("Soya"."grupo_id" = "Grupo"."id")
...
Possibly more joins
...
WHERE
"Grupo"."categoria" = 'Soya'
AND
"Grupo"."subcategoria" = 'Productor de Oleaginosas'
Ou Use contáveis
O comportamento de contenção permite um melhor controle de quais consultas são executadas. Dadas as informações na pergunta para usá-lo, isso significa:
<?php
class Soya extends AppModel {
// Assumed from information in the question
public $useTable = 'users';
public $belongsTo = array('Grupo');
// added
public $actsAs = array('Containable');
}
Permitirá que você faça o seguinte em seu controlador:
$data = $this->Soya->find('list', array(
'fields'=> array('Soya.id','Soya.username'),
'contain' => array('Grupo'), // added
'conditions' => array(
'Grupo.categoria' => 'Soya' ,
'Grupo.subcategoria' => 'Productor de Oleaginosas'
)
));
Que irá gerar a seguinte consulta (exatamente uma junção):
SELECT
"Soya"."id" AS "Soya__id",
"Soya"."username" AS "Soya__username"
FROM
"public"."users" as "Soya"
LEFT JOIN
"public"."Grupos" as "Grupo" on ("Soya"."grupo_id" = "Grupo"."id")
WHERE
"Grupo"."categoria" = 'Soya'
AND
"Grupo"."subcategoria" = 'Productor de Oleaginosas'