Necesita que la tabla de grupos se una a la consulta, su consulta en la pregunta no tiene uniones. Hay una serie de soluciones simples.
Definir recursivo.
Recursive es un control muy tosco de qué uniones y consultas se ejecutan, por defecto find('list')
tiene un valor recursivo de -1.
-1 significa que no hay uniones, por lo que no hay uniones en la consulta resultante. Si se establece en un valor de 0, se agrega una unión a la consulta principal para todas las asociaciones hasOne y pertenecen a.
Tenga cuidado con el uso o la dependencia de recursos recursivos, ya que es muy fácil generar consultas con uniones que no necesita y/o desencadenar muchas consultas posteriores para datos relacionados (si se establece en un valor superior a 0).
Sin embargo, esta llamada de búsqueda:
$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'
)
));
Debería dar como resultado esta consulta (If el modelo Soya tiene una asociación Pertenece a 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'
O usar contenido
El comportamiento contenedor permite un mejor control de las consultas que se ejecutan. Dada la información en la pregunta para usarlo, eso significa:
<?php
class Soya extends AppModel {
// Assumed from information in the question
public $useTable = 'users';
public $belongsTo = array('Grupo');
// added
public $actsAs = array('Containable');
}
Le permitirá hacer lo siguiente en su 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'
)
));
Lo que generará la siguiente consulta (exactamente una unión):
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'