Potřebujete, aby byla v dotazu připojena tabulka grupos, váš dotaz v otázce nemá žádná spojení. Existuje řada jednoduchých řešení.
Definujte rekurzivní.
Rekurzivní je velmi hrubé ovládání toho, jaké spojení a dotazy se provádějí, ve výchozím nastavení find('list')
má rekurzivní hodnotu -1.
-1 znamená žádná spojení, což je důvod, proč ve výsledném dotazu není žádné spojení. Nastavení na hodnotu 0 přidá spojení k hlavnímu dotazu pro všechna přidružení hasOne a PatriTo.
Dejte si pozor na použití/spoléhání se na rekurzivní, protože je velmi snadné generovat dotazy se spojeními, která nepotřebujete – a/nebo spouštět mnoho následných dotazů na související data (pokud je nastaveno na hodnotu větší než 0).
Nicméně toto najít volání:
$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'
)
));
Výsledkem by měl být tento dotaz (Pokud model Soya má přidružení patří ke skupině 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'
Nebo použijte obsah
Obsažitelné chování umožňuje lepší kontrolu nad tím, jaké dotazy se provádějí. Vzhledem k informacím v otázce to použít, to znamená:
<?php
class Soya extends AppModel {
// Assumed from information in the question
public $useTable = 'users';
public $belongsTo = array('Grupo');
// added
public $actsAs = array('Containable');
}
Umožní vám ve vašem ovladači provádět následující:
$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'
)
));
Což vygeneruje následující dotaz (přesně jedno spojení):
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'