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
Lepaskan: 2024-12-29 19:52:15
asal
890 orang telah melayarinya

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'];
}
Salin selepas log masuk

Kemudian, gunakan gelagat yang boleh dibendung:

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

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'
]);
Salin selepas log masuk

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']];
}
Salin selepas log masuk

Cari panggilan:

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

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan