CakePHP は、便利な ORM (オブジェクト リレーショナル マッピング) 機能を提供する人気の PHP フレームワークで、データベースのクエリと更新を非常に簡単にします。
この記事では、CakePHP でデータをクエリおよび更新する方法を紹介します。単純なクエリと更新から始めて、条件と関連モデルを使用してより複雑なデータのクエリと更新を行う方法を見ていきます。
まず、最も単純なクエリの作成方法を見てみましょう。 「Users」というデータ テーブルがあり、すべてのユーザー レコードを取得したいとします。
CakePHP では、find メソッドを使用してデータを取得できます。サンプル コードは次のとおりです。
$users = $this->Users->find('all');
これは、すべてのユーザー レコードを含む配列を返します。 1 つのレコードだけを取得したい場合は、find('first') メソッドを使用できます。
$user = $this->Users->find('first');
これにより、最初のユーザー レコードが返されます。 find('list') メソッドを使用して、キーと値のペアのハッシュ テーブルを取得することもできます。ここで、キーはレコードの主キーであり、値は指定されたフィールドです。たとえば、ユーザー ID と名前のハッシュ テーブルを取得したい場合は、次のコードを使用できます。
$users = $this->Users->find('list', ['keyField' => 'id', 'valueField' => 'name']);
実行する必要がある場合条件付きクエリ CakePHP は、クエリ結果のデータをフィルタリングする便利な方法を提供します。 where メソッドと andWhere メソッドを使用して、プログラムでクエリ条件を作成できます。以下はサンプル コードです。
$users = $this->Users->find() ->where(['age >' => 18, 'name LIKE' => '%John%']) ->andWhere(['gender' => 'male']) ->all();
上記のコードでは、where メソッドと andWhere メソッドを使用してクエリ条件を指定します。最初の条件は、18 歳以上で名前に「John」が含まれるユーザーを指定します。 2 番目の条件は、性別が「男性」のユーザーを指定します。最後に、all メソッドを使用して、条件を満たすすべてのユーザー レコードを取得します。
IN、NOT IN、BETWEEN などの複雑なクエリ条件を使用することもできます。サンプル コードは次のとおりです。
$users = $this->Users->find() ->where(['age BETWEEN' => [18, 25]]) ->andWhere(['state IN' => ['CA', 'NY', 'TX']]) ->all();
上記のコードでは、BETWEEN 条件と IN 条件を使用して、18 ~ 25 歳でステータスが CA、NY、または TX のユーザーを指定しました。同様に、all メソッドを使用して、基準を満たすすべてのユーザー レコードを取得します。
CakePHP では、相関クエリを簡単に実行できます。ユーザー レコードに加えて「投稿」というデータ テーブルがあり、各ユーザーが複数の投稿を持っているとします。ユーザーとそのすべての投稿をクエリする方法を見てみましょう。
まず、User モデルで Posts の関連付けを定義する必要があります。 belongsTo メソッドを使用して、データ テーブルを User モデルに関連付けることができます。以下はサンプル コードです:
class UsersTable extends Table { public function initialize(array $config) { $this->hasMany('Posts'); } }
上記のコードでは、hasMany メソッドを使用して、User モデルと Posts データ テーブルの間の関連付けを指定します。
これで、関連付けられたクエリの find メソッドを使用して、すべてのユーザーとそのすべての記事を取得できるようになります。以下にサンプル コードを示します。
$users = $this->Users->find('all', [ 'contain' => ['Posts'] ]);
上記のコードでは、contain オプションを使用して、関連付けるデータ テーブルを指定します。配列を介して複数の関連付けを指定することもできます。たとえば、User モデルが Comments テーブルにも関連付けられている場合、次のように書くことができます:
$users = $this->Users->find('all', [ 'contain' => ['Posts', 'Comments'] ]);
関連付けられたクエリを実行するとき、CakePHP は内部結合 (INNER JOIN) を使用して 2 つのデータ テーブルを結合して取得します。関連データ。 LEFT JOIN または RIGHT JOIN を使用する場合は、関連付け定義でそれらを指定できます。
データベース内のレコードを更新する必要がある場合、CakePHP は更新操作を実行する便利な方法を提供します。 updateAll メソッドを使用して、プログラムによってレコードを更新できます。以下はサンプル コードです。
$result = $this->Users->updateAll( ['age' => 25], ['name LIKE' => '%John%'] );
上記のコードでは、updateAll メソッドを使用して、名前に「John」が含まれる 25 歳のすべてのユーザーを更新します。 updateAll メソッドは 2 つのパラメーターを受け入れます。最初のパラメータは、設定する列と値を指定します。上の例では、年齢を 25 に設定しています。 2 番目のパラメータは、レコードを更新する条件を指定します。
1 つのレコードのみを更新する場合は、save メソッドを使用できます。以下はサンプル コードです:
$user = $this->Users->get(1); $user->age = 25; $this->Users->save($user);
上記のコードでは、get メソッドを使用して ID 1 のユーザー レコードを取得します。次に、レコードの経過時間を更新し、save メソッドを使用して変更を保存します。
レコードを削除する必要がある場合は、CakePHP が提供する deleteAll および delete メソッドを使用することもできます。
概要
この記事では、CakePHP でデータのクエリと更新を実行する方法を紹介しました。単純なクエリと更新メソッドの使用方法と、より複雑なクエリと更新に条件付きモデルとリレーショナル モデルを使用する方法を学びました。 CakePHP が提供する便利な ORM 機能を使用すると、アプリケーションのニーズに合わせてデータベースを簡単に操作できます。
以上がCakePHP でデータをクエリおよび更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。