Anda memerlukan tabel grupos untuk digabungkan dalam kueri, kueri Anda dalam pertanyaan tidak memiliki gabungan. Ada sejumlah solusi sederhana.
Tentukan rekursif.
Rekursif adalah kontrol yang sangat kasar dari apa yang bergabung dan kueri dieksekusi, secara default find('list')
memiliki nilai rekursif -1.
-1 berarti tidak ada yang bergabung, itulah sebabnya tidak ada yang bergabung dalam kueri yang dihasilkan. Menyetelnya ke nilai 0 menambahkan gabungan ke kueri utama untuk semua asosiasi hasOne dan milikTo.
Berhati-hatilah dalam menggunakan/mengandalkan rekursif karena sangat mudah untuk membuat kueri dengan gabungan yang tidak Anda perlukan - dan/atau memicu banyak kueri berikutnya untuk data terkait (jika disetel ke nilai yang lebih besar dari 0).
Namun panggilan pencarian ini:
$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'
)
));
Harus menghasilkan kueri ini (Jika model Soya memiliki asosiasi milik ke 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'
Atau Gunakan yang bisa ditampung
Perilaku yang dapat ditahan memungkinkan kontrol yang lebih baik atas kueri apa yang dieksekusi. Mengingat info dalam pertanyaan untuk menggunakannya itu berarti:
<?php
class Soya extends AppModel {
// Assumed from information in the question
public $useTable = 'users';
public $belongsTo = array('Grupo');
// added
public $actsAs = array('Containable');
}
Akan mengizinkan Anda melakukan hal berikut di pengontrol Anda:
$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'
)
));
Yang akan menghasilkan kueri berikut (tepatnya satu gabungan):
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'