Du skal bruge grupos-tabellen for at blive tilsluttet i forespørgslen, din forespørgsel i spørgsmålet har ingen joinforbindelser. Der er en række simple løsninger.
Definer rekursiv.
Rekursiv er en meget grov kontrol af, hvilke joinforbindelser og forespørgsler der udføres, som standard find('list')
har en rekursiv værdi på -1.
-1 betyder ingen joinforbindelser, hvorfor der ikke er nogen join i den resulterende forespørgsel. Hvis du indstiller den til en værdi på 0, tilføjes en joinforbindelse til hovedforespørgslen for alle hasOne- og belongsTo-foreninger.
Vær forsigtig med at bruge/stole på rekursivt, da det er meget nemt at generere forespørgsler med joinforbindelser, du ikke har brug for - og/eller udløse mange efterfølgende forespørgsler for relaterede data (hvis indstillet til en værdi større end 0).
Men dette find kalder:
$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 resultere i denne forespørgsel (Hvis Soya-modellen har en tilhører-tilknytning til 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 brug containable
Den indholdsmæssige adfærd giver bedre kontrol over, hvilke forespørgsler der udføres. Givet oplysningerne i spørgsmålet for at bruge det, 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');
}
Vil tillade dig at gøre følgende i din 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'
)
));
Hvilket vil generere følgende forespørgsel (nøjagtig én 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'