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
Lepaskan: 2025-01-04 13:47:39
asal
243 orang telah melayarinya

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

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

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

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

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

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 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