Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Cekap Menggunakan JOIN dengan Kaedah cari CakePHP?

Bagaimana untuk Cekap Menggunakan JOIN dengan Kaedah cari CakePHP?

Barbara Streisand
Lepaskan: 2025-01-03 03:35:43
asal
284 orang telah melayarinya

How to Efficiently Use JOINs with CakePHP's find Method?

Menggunakan JOIN dalam Kaedah cari CakePHP

Untuk mendapatkan semula data daripada berbilang jadual menggunakan JOIN dalam CakePHP 2.x, dua kaedah boleh digunakan.

Kaedah 1: Cara CakePHP (disyorkan)

  1. Tentukan perhubungan: Cipta perhubungan antara model anda menggunakan belongsTo dan hasMany persatuan.

    • Tambah $actsAs = ['Bendungan']; kepada kedua-dua model untuk membolehkan pembendungan.
  2. Ubah suai lajur mesej: Tukar mesej.daripada messages.user_id untuk memadankan persatuan.
  3. Gunakan kaedah cari: Jalankan pertanyaan berikut daripada anda MessagesController:

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

Kaedah 2: SERTAI Tersuai

  1. Tentukan sambung secara manual: Nyatakan syarat sertai terus dalam carian kaedah.

    $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 Perhubungan kepada Model Yang Sama

Untuk menggunakan dua perhubungan kepada model yang sama, anda boleh menentukan perhubungan yang berasingan dalam model anda, seperti:

class User {
    ...
    public $belongsTo = ['MessagesReceived', 'MessagesSent'];
    ...
}

class Message {
    ...
    public $belongsTo = ['UserFrom', 'UserTo'];
    ...
}
Salin selepas log masuk

Kemudian, anda boleh menggunakan kaedah cari dengan yang sesuai perhubungan:

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

Atas ialah kandungan terperinci Bagaimana untuk Cekap Menggunakan JOIN dengan Kaedah cari CakePHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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