Potrzebujesz, aby tabela grupos była sprzężona w zapytaniu, Twoje zapytanie w pytaniu nie zawiera złączeń. Istnieje wiele prostych rozwiązań.
Zdefiniuj rekurencyjne.
Rekursywny to bardzo zgrubna kontrola nad tym, jakie sprzężenia i zapytania są wykonywane, domyślnie find('list')
ma rekurencyjną wartość -1.
-1 oznacza brak złączeń, dlatego w wynikowym zapytaniu nie ma złączenia. Ustawienie jej na wartość 0 dodaje sprzężenie do głównego zapytania dla wszystkich asocjacji hasOne i submitTo.
Uważaj na używanie / poleganie na rekursywności, ponieważ bardzo łatwo jest generować zapytania ze sprzężeniami, których nie potrzebujesz - i/lub wyzwalać wiele kolejnych zapytań o powiązane dane (jeśli ustawiono wartość większą niż 0).
Jednak to znajdź wywołanie:
$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'
)
));
Powinno spowodować to zapytanie (Jeśli model Soya należy do stowarzyszenia 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'
Lub użyj kontenera
Zawarte zachowanie umożliwia lepszą kontrolę nad wykonywanymi zapytaniami. Biorąc pod uwagę informacje w pytaniu, aby go użyć, oznacza to:
<?php
class Soya extends AppModel {
// Assumed from information in the question
public $useTable = 'users';
public $belongsTo = array('Grupo');
// added
public $actsAs = array('Containable');
}
Pozwoli ci wykonać następujące czynności w kontrolerze:
$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'
)
));
Które wygeneruje następujące zapytanie (dokładnie jedno sprzężenie):
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'