CakePHP フレームワークのデータベース クエリ ビルダー (クエリ ビルダー) を使用して複数テーブル結合クエリを実行する方法
Web アプリケーションを開発する場合、データの保存と取得にデータベースを使用することは非常に一般的な要件です。実際のアプリケーションでは、異なるデータ テーブル間に相関関係があることが多いため、複数テーブルの結合クエリが必要になります。
CakePHP フレームワークは、強力なデータベース クエリ ビルダー (クエリ ビルダー) 機能を提供し、複数テーブルの結合クエリをシンプルかつ効率的に実行します。この記事では、CakePHP フレームワークでデータベース クエリ ビルダーを使用して複数テーブル結合クエリを実行する方法と、いくつかの一般的な操作のコード例を紹介します。
まず、CakePHP 設定ファイルでデータベース接続を設定する必要があります。 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
という 2 つのデータ テーブルがあるとします。まず、次のコードを使用して 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 { }
このようにして、2 つのモデル ファイルを作成し、対応するデータ テーブルに関連付けました。
次に、データベース クエリ ビルダーを使用して複数テーブル結合クエリを実行します。各ユーザーが公開した最新の記事をクエリする必要があると想定します。
まず、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 を使用してクエリ結果をループし、各ユーザーの最新記事の ID、名前、タイトルを表示します。出てくる。
以上がCakePHP フレームワークのデータベース クエリ ビルダー (クエリ ビルダー) を使用して複数テーブル結合クエリを実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。