Kaedah Cari CakePHP dengan JOIN
Untuk melaksanakan pertanyaan pangkalan data yang kompleks, CakePHP menawarkan kaedah cari, yang membolehkan keupayaan pertanyaan yang fleksibel. Satu tugas biasa ialah untuk mendapatkan semula data daripada berbilang jadual menggunakan operasi JOIN.
Pendekatan CakePHP Standard
CakePHP 2.x menyediakan cara yang mudah untuk menggabungkan jadual menggunakan tingkah laku yang boleh dibendung. Dengan mewujudkan perhubungan antara model melalui hasMany dan belongsTo, anda boleh mendapatkan semula data berkaitan dengan lancar melalui satu pertanyaan.
Sebagai contoh, anggap anda mempunyai model Message dan model Pengguna. Medan messages.from merujuk kepada medan users.id. Untuk menyertai jadual ini dan mendapatkan maklumat pengguna bersama-sama dengan mesej, ikuti langkah berikut:
class User extends AppModel { public $actsAs = array('Containable'); public $hasMany = array('Message'); } class Message extends AppModel { public $actsAs = array('Containable'); public $belongsTo = array('User'); }
$this->Message->find('all', array( 'contain' => array('User'), 'conditions' => array( 'Message.to' => 4 ), 'order' => 'Message.datetime DESC' ));
Sintaks JOIN Tersuai
Sebagai alternatif, anda boleh mentakrifkan gabungan tersuai menggunakan pilihan gabungan:
$this->Message->find('all', array( 'joins' => array( array( 'table' => 'users', 'alias' => 'UserJoin', 'type' => 'INNER', 'conditions' => array( 'UserJoin.id = Message.from' ) ) ), 'conditions' => array( 'Message.to' => 4 ), 'fields' => array('UserJoin.*', 'Message.*'), 'order' => 'Message.datetime DESC' ));
Menggunakan Pelbagai Hubungan yang Sama Model
Dalam sesetengah kes, anda mungkin ingin mewujudkan berbilang perhubungan kepada model yang sama. Berikut ialah contoh:
class User extends AppModel { public $actsAs = array('Containable'); public $hasMany = array( 'MessagesSent' => array( 'className' => 'Message', 'foreignKey' => 'from' ) ); public $hasBelongsTo = array( 'MessagesReceived' => array( 'className' => 'Message', 'foreignKey' => 'to' ) ); }
Dengan persediaan ini, anda boleh melaksanakan pertanyaan berikut:
$this->Message->find('all', array( 'contain' => array('UserFrom'), 'conditions' => array( 'Message.to' => 4 ), 'order' => 'Message.datetime DESC' ));
Atas ialah kandungan terperinci Bagaimana untuk Melakukan Operasi JOIN dengan Kaedah Cari CakePHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!