Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Melaksanakan Pertanyaan JOIN dalam Kaedah `find` CakePHP?
Dalam CakePHP, kaedah cari membolehkan pertanyaan pangkalan data yang berkuasa. Untuk melakukan pertanyaan JOIN, anda boleh sama ada menggunakan ciri pembendungan terbina dalam atau mentakrifkan cantuman tersuai.
Pembendungan (Disyorkan)
Untuk menggunakan pembendungan, anda mesti menentukan hubungan antara model anda. Contohnya, jika anda mempunyai model Mesej dan model Pengguna, anda akan mengisytiharkan perkaitan dalam model anda:
class User extends AppModel { public $hasMany = ['Message']; } class Message extends AppModel { public $belongsTo = ['User']; }
Dengan perhubungan ini disediakan, anda boleh melakukan pertanyaan JOIN dengan memasukkan kandungan dalam penemuan anda panggilan kaedah:
$messages = $this->Message->find('all', [ 'contain' => ['User'], 'conditions' => ['Message.to' => 4], 'order' => 'Message.datetime DESC' ]);
Cantum Tersuai
Jika anda memilih untuk menentukan tersuai menyertai, anda boleh menggunakan pilihan gabungan dalam panggilan kaedah cari anda:
$messages = $this->Message->find('all', [ 'joins' => [ [ 'table' => 'users', 'alias' => 'UserJoin', 'type' => 'INNER', 'conditions' => ['UserJoin.id = Message.from'] ] ], 'conditions' => ['Message.to' => 4], 'fields' => ['UserJoin.*', 'Message.*'], 'order' => 'Message.datetime DESC' ]);
Perhatikan bahawa anda perlu menentukan pilihan medan secara eksplisit apabila menggunakan gabungan tersuai untuk memastikan medan yang betul dikembalikan.
Menggunakan Pelbagai Hubungan kepada Model Yang Sama
Pendekatan lain ialah mewujudkan berbilang hubungan kepada model yang sama untuk persatuan yang berbeza. Contohnya, dalam kes mesej, anda boleh mempunyai hubungan MessageSent untuk mesej keluar dan hubungan MessageReceived untuk mesej masuk:
class User extends AppModel { public $hasMany = [ 'MessagesSent' => ['className' => 'Message', 'foreignKey' => 'from'], 'MessagesReceived' => ['className' => 'Message', 'foreignKey' => 'to'] ]; } class Message extends AppModel { public $belongsTo = [ 'UserFrom' => ['className' => 'User', 'foreignKey' => 'from'], 'UserTo' => ['className' => 'User', 'foreignKey' => 'to'] ]; }
Dengan perhubungan ini, anda boleh melakukan pertanyaan JOIN seperti berikut:
$messages = $this->Message->find('all', [ 'contain' => ['UserFrom'], 'conditions' => ['Message.to' => 4], 'order' => 'Message.datetime DESC' ]);
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pertanyaan JOIN dalam Kaedah `find` CakePHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!