Mencari Rekod dengan JOIN dalam CakePHP
Untuk mendapatkan semula data daripada berbilang jadual dalam satu pertanyaan menggunakan kaedah cari CakePHP, anda boleh menggunakan pelbagai teknik . Satu pendekatan ialah menggunakan perhubungan data terbina dalam rangka kerja dan gelagat pembendungan untuk mendapatkan semula data yang lancar.
Cara CakePHP
Pendekatan ini melibatkan penentuan hubungan antara model anda dan memanfaatkan tingkah laku Boleh Ditahan. Dengan mengkonfigurasi perhubungan seperti:
class User extends AppModel { public $actsAs = array('Containable'); public $hasMany = array('Message'); } class Message extends AppModel { public $actsAs = array('Containable'); public $belongsTo = array('User'); }
Anda kemudiannya boleh mendapatkan semula rekod berkaitan menggunakan parameter kandungan dalam kaedah cari:
$this->Message->find('all', array( 'contain' => array('User'), 'conditions' => array( 'Message.to' => 4 ), 'order' => 'Message.datetime DESC' ));
Custom SQL Joins
Sebagai alternatif, anda boleh menentukan gabungan SQL tersuai untuk menentukan perhubungan khusus antara jadual. Ini boleh berguna dalam senario yang lebih kompleks. Berikut ialah contoh:
$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' ));
Perhatikan bahawa kaedah ini memerlukan anda untuk menentukan secara manual medan yang anda ingin dapatkan daripada kedua-dua jadual.
Menggunakan Pelbagai Hubungan kepada Model Yang Sama
Dalam kes di mana anda perlu mendapatkan semula data daripada jadual yang sama melalui berbilang perhubungan, anda boleh menentukan berbilang hubungan dengan alias yang berbeza. Berikut ialah contoh:
class User extends AppModel { public $actsAs = array('Containable'); public $hasMany = array( 'MessagesSent' => array( 'className' => 'Message', 'foreignKey' => 'from' ) ); public $belongsTo = array( 'MessagesReceived' => array( 'className' => 'Message', 'foreignKey' => 'to' ) ); }
Kini, anda boleh menggunakan gelagat pembendungan untuk mendapatkan semula rekod yang berkaitan dengan perhubungan ini:
$this->Message->find('all', array( 'contain' => array('UserFrom'), 'conditions' => array( 'Message.to' => 4 ), 'order' => 'Message.datetime DESC' ));
Dengan menggunakan teknik ini, anda boleh mendapatkan data daripada berbilang dengan cekap jadual dalam aplikasi CakePHP anda.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Dapatkan Data daripada Berbilang Jadual Menggunakan JOIN dalam CakePHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!