Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menyertai Jadual dengan Cekap dalam CakePHP menggunakan Kaedah Cari?

Bagaimana untuk Menyertai Jadual dengan Cekap dalam CakePHP menggunakan Kaedah Cari?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-29 19:52:15893semak imbas

How to Efficiently Join Tables in CakePHP using the Find Method?

Menyertakan Jadual dengan Kaedah Cari CakePHP

Untuk mendapatkan semula data daripada berbilang jadual dengan kaedah cari CakePHP, pertimbangkan pilihan berikut:

Standard CakePHP Way

Jalinkan hubungan antara model anda menggunakan hartanah actsAs dan hasMany atau belongsTo. Contohnya:

class User extends AppModel {
    public $actsAs = ['Containable'];
    public $hasMany = ['Message'];
}

class Message extends AppModel {
    public $actsAs = ['Containable'];
    public $belongsTo = ['User'];
}

Kemudian, gunakan gelagat yang boleh dibendung:

$this->Message->find('all', [
    'contain' => ['User'],
    'conditions' => ['Message.to' => 4],
    'order' => 'Message.datetime DESC'
]);

Cantum Tersuai

Tentukan gabungan tersuai dalam kaedah pencarian anda :

$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'
]);

Menggunakan Dua Hubungan yang Sama Model

Untuk mendapatkan semula data berdasarkan dua perhubungan dengan model yang sama, ubah suai model anda dan gunakan gelagat yang boleh dibendung:

class User extends AppModel {
    public $actsAs = ['Containable'];
    public $hasMany = ['MessagesSent' => ['className' => 'Message', 'foreignKey' => 'from']];
    public $belongsTo = ['MessagesReceived' => ['className' => 'Message', 'foreignKey' => 'to']];
}

class Message extends AppModel {
    public $actsAs = ['Containable'];
    public $belongsTo = ['UserFrom' => ['className' => 'User', 'foreignKey' => 'from']];
    public $hasMany = ['UserTo' => ['className' => 'User', 'foreignKey' => 'to']];
}

Cari panggilan:

$this->Message->find('all', [
    'contain' => ['UserFrom'],
    'conditions' => ['Message.to' => 4],
    'order' => 'Message.datetime DESC'
]);

Atas ialah kandungan terperinci Bagaimana untuk Menyertai Jadual dengan Cekap dalam CakePHP menggunakan Kaedah Cari?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn