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
Barbara Streisandasal
2025-01-03 03:35:43270semak imbas

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

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

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'];
    ...
}

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

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

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!

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