Du behöver grupostabellen för att anslutas i frågan, din fråga i frågan har inga joins. Det finns ett antal enkla lösningar.
Definiera rekursiv.
Rekursiv är en mycket grov kontroll av vilka kopplingar och frågor som exekveras, som standard find('list')
har ett rekursivt värde på -1.
-1 betyder inga joins, vilket är anledningen till att det inte finns någon join i den resulterande frågan. Om du ställer in det till värdet 0 läggs en koppling till huvudfrågan för alla hasOne- och belongsTo-föreningar.
Var försiktig med att använda/lita på rekursiv eftersom det är mycket enkelt att generera frågor med kopplingar som du inte behöver - och/eller trigga många efterföljande frågor för relaterade data (om inställt på ett värde större än 0).
Men detta hitta samtal:
$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'
)
));
Bör resultera i den här frågan (Om Sojamodellen har en tillhörighetsassociation till 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'
Eller använd containable
Det innehållsbara beteendet ger bättre kontroll över vilka frågor som exekveras. Med tanke på informationen i frågan för att använda den betyder det:
<?php
class Soya extends AppModel {
// Assumed from information in the question
public $useTable = 'users';
public $belongsTo = array('Grupo');
// added
public $actsAs = array('Containable');
}
Tillåter dig att göra följande i din handkontroll:
$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'
)
));
Vilket genererar följande fråga (exakt en 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'