JOIN을 사용한 CakePHP 찾기 메서드
복잡한 데이터베이스 쿼리를 실행하기 위해 CakePHP는 유연한 쿼리 기능을 허용하는 find 메서드를 제공합니다. 일반적인 작업 중 하나는 JOIN 연산을 사용하여 여러 테이블에서 데이터를 검색하는 것입니다.
표준 CakePHP 접근 방식
CakePHP 2.x는 다음을 사용하여 테이블을 조인하는 간단한 방법을 제공합니다. 억제 가능한 행동. hasMany와 presentsTo를 통해 모델 간 관계를 설정하면 단일 쿼리를 통해 관련 데이터를 원활하게 검색할 수 있습니다.
예를 들어 메시지 모델과 사용자 모델이 있다고 가정해 보겠습니다. message.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 중국어 웹사이트의 기타 관련 기사를 참조하세요!