È necessario che la tabella grupos sia unita nella query, la query nella domanda non ha join. Esistono diverse soluzioni semplici.
Definisci ricorsivo.
Il ricorsivo è un controllo molto grossolano di quali join e query vengono eseguiti, per impostazione predefinita find('list')
ha un valore ricorsivo di -1.
-1 significa nessun join, motivo per cui non ci sono join nella query risultante. Impostandolo su un valore di 0 si aggiunge un join alla query principale per tutte le associazioni hasOne e appartiene a.
Diffida dall'usare/fare affidamento su ricorsivi poiché è molto facile generare query con join non necessari e/o attivare molte query successive per dati correlati (se impostato su un valore maggiore di 0).
Tuttavia questa trova chiamata:
$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'
)
));
Dovrebbe risultare in questa query (If il modello Soya ha un'associazione appartiene 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'
Oppure usa contenibile
Il comportamento contenibile consente un migliore controllo di quali query vengono eseguite. Date le informazioni nella domanda per usarlo significa:
<?php
class Soya extends AppModel {
// Assumed from information in the question
public $useTable = 'users';
public $belongsTo = array('Grupo');
// added
public $actsAs = array('Containable');
}
Ti permetterà di fare quanto segue nel tuo controller:
$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'
)
));
Che genererà la seguente query (esattamente un join):
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'