在 CakePHP 中,find 方法允許強大的資料庫查詢。若要執行 JOIN 查詢,您可以使用內建包含功能或定義自訂聯接。
包含(建議)
要使用包含,您必須定義模型之間的關係。例如,如果您有一個 Message 模型和一個 User 模型,您將在模型中聲明關聯:
class User extends AppModel { public $hasMany = ['Message']; } class Message extends AppModel { public $belongsTo = ['User']; }
設定這些關係後,您可以透過在查找中包含 contains 來執行 JOIN查詢方法呼叫:
$messages = $this->Message->find('all', [ 'contain' => ['User'], 'conditions' => ['Message.to' => 4], 'order' => 'Message.datetime DESC' ]);
自訂連接
如果您喜歡定義自訂連接,您可以在find 方法呼叫中使用joins 選項:
$messages = $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' ]);
請注意,在使用自訂連線時,您需要明確指定fields選項,以確保返回正確的欄位。
使用與同一模型的多個關係
另一種方法是為同一模型創建多個關係不同的協會。例如,對於訊息,您可以為傳出訊息建立MessageSent 關係,為傳入訊息建立MessageReceived 關係:
class User extends AppModel { public $hasMany = [ 'MessagesSent' => ['className' => 'Message', 'foreignKey' => 'from'], 'MessagesReceived' => ['className' => 'Message', 'foreignKey' => 'to'] ]; } class Message extends AppModel { public $belongsTo = [ 'UserFrom' => ['className' => 'User', 'foreignKey' => 'from'], 'UserTo' => ['className' => 'User', 'foreignKey' => 'to'] ]; }
使用這些關係,您可以執行JOIN 查詢,如下所示:
$messages = $this->Message->find('all', [ 'contain' => ['UserFrom'], 'conditions' => ['Message.to' => 4], 'order' => 'Message.datetime DESC' ]);
以上是如何在 CakePHP 的「find」方法中執行 JOIN 查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!