CakePHP の find メソッドでの JOIN の使用
CakePHP 2.x で JOIN を使用して複数のテーブルからデータを取得するには、2 つの方法を使用できます。
方法 1: CakePHP の方法(推奨)
関係を定義します:belongsTo および hasMany 関連付けを使用してモデル間の関係を作成します。
検索メソッドを使用します: から次のクエリを実行します。 MessagesController:
$this->Message->find('all', [ 'contain' => ['User'], 'conditions' => ['Message.to' => 4], 'order' => 'Message.datetime DESC' ]);
方法 2: カスタム JOIN
結合を手動で定義する:検索で結合条件を直接指定します。
$this->Message->find('all', [ 'joins' => [ [ 'table' => 'users', 'alias' => 'UserJoin', 'type' => 'INNER', 'conditions' => ['UserJoin.id = Message.from'] ] ], 'conditions' => ['Message.to' => 4], 'fields' => ['UserJoin.*', 'Message.*'], 'order' => 'Message.datetime DESC' ]);
同じモデルに対する 2 つのリレーションシップの使用
同じモデルに対して 2 つのリレーションシップを使用するには、別々のリレーションシップを定義できます。モデル内では次のようになります。
class User { ... public $belongsTo = ['MessagesReceived', 'MessagesSent']; ... } class Message { ... public $belongsTo = ['UserFrom', 'UserTo']; ... }
その後、適切なメソッドを使用して find メソッドを使用できます。関係:
$this->Message->find('all', [ 'contain' => ['UserFrom'], 'conditions' => ['Message.to' => 4], 'order' => 'Message.datetime DESC' ]);
以上がCakePHP の find メソッドで JOIN を効率的に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。