Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk bertanya dan mengemas kini data dalam CakePHP?
CakePHP ialah rangka kerja PHP popular yang menyediakan fungsi ORM (Pemetaan Perhubungan Objek) yang mudah, menjadikannya sangat mudah untuk membuat pertanyaan dan mengemas kini pangkalan data.
Artikel ini akan memperkenalkan cara membuat pertanyaan dan mengemas kini data dalam CakePHP. Kami akan mulakan dengan pertanyaan dan kemas kini mudah dan berusaha untuk melihat cara menggunakan keadaan dan model yang berkaitan untuk membuat pertanyaan dan mengemas kini data dengan lebih kompleks.
Mula-mula, mari lihat cara membuat pertanyaan paling mudah. Katakan kami mempunyai jadual data yang dipanggil "Pengguna" dan kami ingin mendapatkan semula semua rekod pengguna.
Dalam CakePHP, kita boleh menggunakan kaedah cari untuk mendapatkan semula data. Berikut ialah contoh kod:
$users = $this->Users->find('all');
Ini akan mengembalikan tatasusunan yang mengandungi semua rekod pengguna. Jika anda hanya ingin mendapatkan satu rekod, anda boleh menggunakan kaedah find('first'):
$user = $this->Users->find('first');
Ini akan mengembalikan rekod pengguna pertama. Anda juga boleh menggunakan kaedah find('list') untuk mendapatkan semula jadual cincang pasangan nilai kunci, dengan kunci ialah kunci utama rekod dan nilainya ialah medan yang ditentukan. Contohnya, jika anda ingin mendapatkan jadual cincang bagi ID dan nama pengguna, anda boleh menggunakan kod berikut:
$users = $this->Users->find('list', ['keyField' => 'id', 'valueField' => 'name']);
Apabila anda perlu melakukan pertanyaan bersyarat CakePHP menyediakan cara yang mudah untuk menapis data dalam hasil pertanyaan. Anda boleh menggunakan kaedah where dan andWhere untuk membina keadaan pertanyaan secara pemrograman. Berikut ialah contoh kod:
$users = $this->Users->find() ->where(['age >' => 18, 'name LIKE' => '%John%']) ->andWhere(['gender' => 'male']) ->all();
Dalam kod di atas, kami menggunakan kaedah where dan and andWhere untuk menentukan syarat pertanyaan. Syarat pertama menentukan pengguna yang berumur lebih daripada 18 tahun dan mempunyai "John" dalam nama mereka. Syarat kedua menentukan pengguna dengan jantina "lelaki". Akhir sekali, kami menggunakan kaedah semua untuk mendapatkan semula semua rekod pengguna yang memenuhi kriteria.
Anda juga boleh menggunakan syarat pertanyaan kompleks, seperti IN, NOT IN, ANTARA, dsb. Berikut ialah contoh kod:
$users = $this->Users->find() ->where(['age BETWEEN' => [18, 25]]) ->andWhere(['state IN' => ['CA', 'NY', 'TX']]) ->all();
Dalam kod di atas, kami telah menggunakan syarat BETWEEN dan IN untuk menentukan pengguna yang berumur antara 18 dan 25 tahun dan yang berstatus CA, NY atau TX. Begitu juga, kami menggunakan kaedah semua untuk mendapatkan semula semua rekod pengguna yang memenuhi kriteria.
Dalam CakePHP, anda boleh melakukan pertanyaan berkaitan dengan mudah. Katakan kita mempunyai jadual data yang dipanggil "Siaran" sebagai tambahan kepada rekod pengguna dan setiap pengguna mempunyai berbilang siaran. Mari lihat cara untuk bertanya kepada pengguna dan semua siaran mereka.
Pertama, kita perlu mentakrifkan perkaitan Siaran dalam model Pengguna. Kita boleh menggunakan kaedah belongsTo untuk mengaitkan jadual data dengan model Pengguna. Berikut ialah contoh kod:
class UsersTable extends Table { public function initialize(array $config) { $this->hasMany('Posts'); } }
Dalam kod di atas, kami menggunakan kaedah hasMany untuk menentukan perkaitan antara model Pengguna dan jadual data Posts.
Kini kita boleh menggunakan kaedah cari pertanyaan berkaitan untuk mendapatkan semua pengguna dan semua artikel mereka. Berikut ialah contoh kod:
$users = $this->Users->find('all', [ 'contain' => ['Posts'] ]);
Dalam kod di atas, kami menggunakan pilihan mengandungi untuk menentukan jadual data yang akan dikaitkan. Anda juga boleh menentukan berbilang persatuan melalui tatasusunan. Contohnya, jika model Pengguna anda turut dikaitkan dengan jadual Komen, anda boleh menulis seperti ini:
$users = $this->Users->find('all', [ 'contain' => ['Posts', 'Comments'] ]);
Apabila melakukan pertanyaan berkaitan, CakePHP akan menggunakan cantuman dalaman (INNER JOIN) untuk menggabungkan dua jadual data untuk mendapatkan data berkaitan. Jika anda ingin menggunakan LEFT JOIN atau KANAN JOIN, anda boleh menentukannya dalam definisi persatuan.
Apabila anda perlu mengemas kini rekod dalam pangkalan data, CakePHP menyediakan cara yang mudah untuk melaksanakan operasi kemas kini. Anda boleh menggunakan kaedah updateAll untuk mengemas kini rekod secara pemrograman. Berikut ialah contoh kod:
$result = $this->Users->updateAll( ['age' => 25], ['name LIKE' => '%John%'] );
Dalam kod di atas, kami menggunakan kaedah kemas kiniSemua untuk mengemas kini semua pengguna yang berumur 25 tahun yang namanya mengandungi "John". Kaedah updateAll menerima dua parameter. Parameter pertama menentukan lajur dan nilai yang akan ditetapkan. Dalam contoh di atas, kami menetapkan umur kepada 25 tahun. Parameter kedua menentukan syarat untuk rekod dikemas kini.
Jika anda hanya ingin mengemas kini satu rekod, anda boleh menggunakan kaedah simpan. Berikut ialah contoh kod:
$user = $this->Users->get(1); $user->age = 25; $this->Users->save($user);
Dalam kod di atas, kami telah menggunakan kaedah get untuk mendapatkan semula rekod pengguna dengan ID 1. Kami kemudian mengemas kini umur rekod dan menggunakan kaedah simpan untuk menyimpan perubahan.
Apabila anda perlu memadamkan rekod, anda juga boleh menggunakan kaedah deleteAll dan padam yang disediakan oleh CakePHP.
Ringkasan
Dalam artikel ini, kami memperkenalkan cara membuat pertanyaan dan mengemas kini data dalam CakePHP. Kami mempelajari cara menggunakan kaedah pertanyaan dan kemas kini yang mudah, serta cara menggunakan model bersyarat dan hubungan untuk pertanyaan dan kemas kini yang lebih kompleks. Dengan menggunakan fungsi ORM yang mudah disediakan oleh CakePHP, anda boleh memanipulasi pangkalan data dengan mudah untuk memenuhi keperluan aplikasi anda.
Atas ialah kandungan terperinci Bagaimana untuk bertanya dan mengemas kini data dalam CakePHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!