집 >데이터 베이스 >MySQL 튜토리얼 >CakePHP에서 JOIN을 사용하여 여러 테이블에서 데이터를 검색하려면 어떻게 해야 합니까?
CakePHP에서 JOIN을 사용하여 레코드 찾기
CakePHP의 찾기 메소드를 사용하여 단일 쿼리로 여러 테이블의 데이터를 검색하려면 다양한 기술을 사용할 수 있습니다. . 한 가지 접근 방식은 원활한 데이터 검색을 위해 프레임워크에 내장된 데이터 관계와 포함 동작을 활용하는 것입니다.
CakePHP 방식
이 접근 방식에는 모델과 모델 간의 관계를 정의하는 작업이 포함됩니다. Containable 동작을 활용합니다. 다음과 같이 관계를 구성하면
class User extends AppModel { public $actsAs = array('Containable'); public $hasMany = array('Message'); } class Message extends AppModel { public $actsAs = array('Containable'); public $belongsTo = array('User'); }
find 메소드에서 포함 매개변수를 사용하여 관련 레코드를 검색할 수 있습니다.
$this->Message->find('all', array( 'contain' => array('User'), 'conditions' => array( 'Message.to' => 4 ), 'order' => 'Message.datetime DESC' ));
사용자 정의 SQL 조인
또는 사용자 정의 SQL 조인을 정의하여 테이블 간의 특정 관계를 지정할 수 있습니다. 이는 보다 복잡한 시나리오에서 유용할 수 있습니다. 예는 다음과 같습니다.
$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 $belongsTo = 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 애플리케이션의 테이블입니다.
위 내용은 CakePHP에서 JOIN을 사용하여 여러 테이블에서 데이터를 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!