JOIN を使用した CakePHP Find メソッド
複雑なデータベース クエリを実行するために、CakePHP は柔軟なクエリ機能を可能にする find メソッドを提供しています。一般的なタスクの 1 つは、JOIN 操作を使用して複数のテーブルからデータを取得することです。
標準 CakePHP アプローチ
CakePHP 2.x は、抑制可能な行動。 hasMany とbelongsTo を介してモデル間の関係を確立すると、単一のクエリを通じて関連データをシームレスに取得できます。
たとえば、Message モデルと User モデルがあると仮定します。 messages.from フィールドは users.id フィールドを参照します。これらのテーブルを結合し、メッセージとともにユーザー情報を取得するには、次の手順に従います。
class User extends AppModel { public $actsAs = array('Containable'); public $hasMany = array('Message'); } class Message extends AppModel { public $actsAs = array('Containable'); public $belongsTo = array('User'); }
$this->Message->find('all', array( 'contain' => array('User'), 'conditions' => array( 'Message.to' => 4 ), 'order' => 'Message.datetime DESC' ));
カスタム JOIN 構文
または、結合オプションを使用してカスタム結合を定義できます:
$this->Message->find('all', array( 'joins' => array( array( 'table' => 'users', 'alias' => 'UserJoin', 'type' => 'INNER', 'conditions' => array( 'UserJoin.id = Message.from' ) ) ), 'conditions' => array( 'Message.to' => 4 ), 'fields' => array('UserJoin.*', 'Message.*'), 'order' => 'Message.datetime DESC' ));
同じものに対して複数の関係を使用するモデル
場合によっては、同じモデルに対して複数の関係を確立したい場合があります。次に例を示します:
class User extends AppModel { public $actsAs = array('Containable'); public $hasMany = array( 'MessagesSent' => array( 'className' => 'Message', 'foreignKey' => 'from' ) ); public $hasBelongsTo = array( 'MessagesReceived' => array( 'className' => 'Message', 'foreignKey' => 'to' ) ); }
この設定では、次のクエリを実行できます:
$this->Message->find('all', array( 'contain' => array('UserFrom'), 'conditions' => array( 'Message.to' => 4 ), 'order' => 'Message.datetime DESC' ));
以上がCakePHP の Find メソッドを使用して JOIN 操作を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。