Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Melaksanakan Pertanyaan JOIN dalam Kaedah `find` CakePHP?

Bagaimana untuk Melaksanakan Pertanyaan JOIN dalam Kaedah `find` CakePHP?

Susan Sarandon
Susan Sarandonasal
2025-01-04 13:47:39204semak imbas

How to Perform JOIN Queries in CakePHP's `find` Method?

Kaedah cari CakePHP dengan JOIN

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!

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