


Cara menggunakan pembina pertanyaan pangkalan data (Pembina Pertanyaan) dalam rangka kerja CakePHP untuk melaksanakan pertanyaan gabungan berbilang jadual
Cara menggunakan pembina pertanyaan pangkalan data (Pembina Pertanyaan) dalam rangka kerja CakePHP untuk melaksanakan pertanyaan gabungan berbilang jadual
Apabila membangunkan aplikasi web, menggunakan pangkalan data untuk penyimpanan dan pengambilan data adalah keperluan yang sangat biasa. Dalam aplikasi praktikal, selalunya terdapat korelasi antara jadual data yang berbeza, jadi pertanyaan bersama berbilang jadual diperlukan.
Rangka kerja CakePHP menyediakan fungsi pembina pertanyaan pangkalan data yang berkuasa (Pembina Pertanyaan), menjadikan pertanyaan bersama berbilang jadual mudah dan cekap. Artikel ini akan memperkenalkan cara menggunakan pembina pertanyaan pangkalan data dalam rangka kerja CakePHP untuk melaksanakan pertanyaan gabungan berbilang jadual, serta contoh kod beberapa operasi biasa.
- Mengkonfigurasi sambungan pangkalan data
Pertama, kita perlu mengkonfigurasi sambungan pangkalan data dalam fail konfigurasi CakePHP. Buka fail config/app.php
dan cari item konfigurasi default
di bawah tatasusunan Datasources
. Dalam item konfigurasi ini, tetapkan maklumat pangkalan data yang berkaitan seperti berikut: config/app.php
文件,找到Datasources
数组下的default
配置项。在该配置项中,设置数据库的相关信息,如下所示:
'Datasources' => [ 'default' => [ 'className' => 'CakeDatabaseConnection', 'driver' => 'CakeDatabaseDriverMysql', 'database' => 'your_database_name', 'username' => 'your_database_username', 'password' => 'your_database_password', 'host' => 'localhost', 'port' => '3306', 'encoding' => 'utf8', 'timezone' => 'UTC', 'cacheMetadata' => true, // ... ], // ... ],
根据实际情况进行相应的配置。
- 创建模型
在CakePHP框架中,每个数据表对应一个模型(Model)。我们需要在src/Model
目录下创建相应的模型文件。
假设我们有两个数据表:users
和posts
,分别对应用户和文章。首先,创建src/Model/User.php
文件,代码如下:
<?php namespace AppModel; use CakeORMTable; class UserTable extends Table { }
然后,创建src/Model/Post.php
文件,代码如下:
<?php namespace AppModel; use CakeORMTable; class PostTable extends Table { }
这样,我们就创建了两个模型文件,并与相应的数据表进行了关联。
- 进行多表联查
接下来,我们将使用数据库查询构建器进行多表联查。我们假设需要查询每个用户发布的最新一篇文章。
首先,在src/Controller/UsersController.php
文件中添加以下代码,以加载相关模型:
<?php namespace AppController; use AppControllerAppController; use AppModelUser; use AppModelPost; class UsersController extends AppController { public function index() { $users = $this->Users->find() ->contain(['Posts']) ->where(['Posts.id' => function($query) { return $query->select(['max' => $query->func()->max('id')]) ->from(['Posts' => 'posts']) ->where(['Posts.user_id = Users.id']); }]) ->all(); $this->set(compact('users')); } }
在上述代码中,我们使用$this->Users->find()
方法开始构建查询。然后,使用$this->Users->find()->contain(['Posts'])
方法,告诉查询构建器关联查询Posts
模型。
接着,我们使用->where()
方法设置查询条件,其中使用了一个子查询来筛选每个用户的最新一篇文章。该子查询使用了->select()
方法来选择最大的id
值,并使用->from()
方法指定了查询的数据表及其别名,以及使用->where()
方法设置了关联条件。
最后,我们使用->all()
方法获取查询结果,并使用$this->set()
方法将查询结果传递给视图。
- 在视图中显示查询结果
最后,我们在src/Template/Users/index.ctp
文件中添加以下代码,以在视图中显示查询结果:
<h1>List of Users and Their Latest Posts</h1> <table> <tr> <th>User ID</th> <th>User Name</th> <th>Latest Post</th> </tr> <?php foreach ($users as $user): ?> <tr> <td><?= $user->id ?></td> <td><?= $user->name ?></td> <td><?= $user->posts[0]->title ?></td> </tr> <?php endforeach; ?> </table>
在上述代码中,我们使用foreach
rrreee
- Buat model
Dalam rangka kerja CakePHP, setiap jadual data sepadan dengan model (Model). Kita perlu mencipta fail model yang sepadan dalam direktori src/Model
.
src/Model/User.php
dengan kod berikut: 🎜rrreee🎜 Kemudian, buat fail src/Model/Post.php
dengan kod berikut : 🎜rrreee🎜 Dengan cara ini, kami telah mencipta dua fail model dan mengaitkannya dengan jadual data yang sepadan. 🎜- 🎜Lakukan pertanyaan bersama berbilang jadual🎜🎜🎜Seterusnya, kami akan menggunakan pembina pertanyaan pangkalan data untuk melaksanakan pertanyaan bersama berbilang jadual. Kami menganggap bahawa kami perlu menanyakan artikel terkini yang diterbitkan oleh setiap pengguna. 🎜🎜Mula-mula, tambah kod berikut dalam fail
src/Controller/UsersController.php
untuk memuatkan model yang berkaitan: 🎜rrreee🎜Dalam kod di atas, kami menggunakan $this->Users - Kaedah >find()
mula membina pertanyaan. Kemudian, gunakan kaedah $this->Users->find()->contain(['Posts'])
untuk memberitahu pembina pertanyaan untuk mengaitkan pertanyaan dengan Posts
model . 🎜🎜Seterusnya, kami menggunakan kaedah ->where()
untuk menetapkan syarat pertanyaan, yang menggunakan subkueri untuk menapis artikel terkini setiap pengguna. Subquery ini menggunakan kaedah ->select()
untuk memilih nilai id
terbesar dan menentukannya menggunakan kaedah ->from()
Jadual data pertanyaan dan aliasnya ditentukan dan syarat perkaitan ditetapkan menggunakan kaedah ->where()
. 🎜🎜Akhir sekali, kami menggunakan kaedah ->all()
untuk mendapatkan hasil pertanyaan dan menggunakan kaedah $this->set()
untuk lulus pertanyaan hasil kepada paparan. 🎜- 🎜Paparkan hasil pertanyaan dalam paparan🎜🎜🎜Akhir sekali, kami menambah kod berikut dalam fail
src/Template/Users/index.ctp
untuk memaparkannya dalam lihat hasil Pertanyaan: 🎜rrreee🎜Dalam kod di atas, kami menggunakan Atas ialah kandungan terperinci Cara menggunakan pembina pertanyaan pangkalan data (Pembina Pertanyaan) dalam rangka kerja CakePHP untuk melaksanakan pertanyaan gabungan berbilang jadual. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Dalam bab ini, kita akan memahami Pembolehubah Persekitaran, Konfigurasi Umum, Konfigurasi Pangkalan Data dan Konfigurasi E-mel dalam CakePHP.

Bekerja dengan pangkalan data dalam CakePHP adalah sangat mudah. Kami akan memahami operasi CRUD (Buat, Baca, Kemas Kini, Padam) dalam bab ini.

CakePHP ialah rangka kerja PHPMVC sumber terbuka yang digunakan secara meluas dalam pembangunan aplikasi web. CakePHP mempunyai banyak ciri dan alatan, termasuk pembina pertanyaan pangkalan data yang berkuasa untuk pangkalan data prestasi interaktif. Pembina pertanyaan ini membolehkan anda melaksanakan pertanyaan SQL menggunakan sintaks berorientasikan objek tanpa perlu menulis pernyataan SQL yang menyusahkan. Artikel ini akan memperkenalkan cara menggunakan pembina pertanyaan pangkalan data dalam CakePHP. Mewujudkan sambungan pangkalan data Sebelum menggunakan pembina pertanyaan pangkalan data, anda perlu membuat sambungan pangkalan data dalam Ca

CakePHP ialah rangka kerja PHP yang berkuasa yang menyediakan pembangun dengan banyak alat dan ciri berguna. Salah satu daripadanya ialah penomboran, yang membantu kami membahagikan sejumlah besar data kepada beberapa halaman, menjadikan penyemakan imbas dan manipulasi lebih mudah. Secara lalai, CakePHP menyediakan beberapa kaedah penomboran asas, tetapi kadangkala anda mungkin perlu mencipta beberapa kaedah penomboran tersuai. Artikel ini akan menunjukkan kepada anda cara membuat penomboran tersuai dalam CakePHP. Langkah 1: Cipta kelas penomboran tersuai Pertama, kita perlu mencipta kelas penomboran tersuai. ini

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Pengesah boleh dibuat dengan menambah dua baris berikut dalam pengawal.

Untuk bekerja dengan tarikh dan masa dalam cakephp4, kami akan menggunakan kelas FrozenTime yang tersedia.

Dalam bab ini, kita akan mempelajari topik berikut yang berkaitan dengan penghalaan ?
