Трябва таблицата grupos да бъде обединена в заявката, вашата заявка във въпроса няма присъединявания. Има редица прости решения.
Дефиниране на рекурсивно.
Рекурсивният е много груб контрол на това какви обединявания и заявки се изпълняват, по подразбиране find('list')
има рекурсивна стойност -1.
-1 означава, че няма обединения, поради което няма присъединяване в получената заявка. Задаването му на стойност 0 добавя присъединяване към основната заявка за всички асоциации hasOne и belongsTo.
Внимавайте да използвате/разчитате на рекурсивно, тъй като е много лесно да генерирате заявки с обединения, които не са ви необходими – и/или да задействате много последващи заявки за свързани данни (ако е зададена стойност, по-голяма от 0).
Обаче това намиране се обажда:
$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'
)
));
Трябва да доведе до тази заявка (Ако моделът Soya има връзка с 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'
Или използвайте contentable
Съдържаемото поведение позволява по-добър контрол на това какви заявки се изпълняват. Предвид информацията във въпроса да го използвате, това означава:
<?php
class Soya extends AppModel {
// Assumed from information in the question
public $useTable = 'users';
public $belongsTo = array('Grupo');
// added
public $actsAs = array('Containable');
}
Ще ви позволи да направите следното във вашия контролер:
$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'
)
));
Което ще генерира следната заявка (точно едно присъединяване):
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'