>  기사  >  php教程  >  Cakephp에서 관련 테이블을 쿼리하는 방법 요약

Cakephp에서 관련 테이블을 쿼리하는 방법 요약

黄舟
黄舟원래의
2016-12-20 09:35:071968검색

다음 방법을 사용하여

{지정된 사용자의 노트에 키워드 키워드가 포함된 모든 정보를 쿼리}

SQL 문

SELECT * FROM Users AS User
LEFT JOIN Notes AS Note ON User.id = Note.user_id
WHERE
User.id = {$user_id}
AND
Note.subject LIKE '%{keyword}%'
을 달성할 수 있습니다.

그런 다음 이 SQL 문을 실행하고 모델의 쿼리 메서드를 사용합니다.

$data = $this->User->query($sql);

2. 모델의 bindModel() 및 unbindModel() 메서드를 사용합니다.

이 두 메서드에 대한 지침은 다음을 참조하세요.


http://api.cakephp.org/class/model

을 참조하세요. 우리의 접근 방식은

//重新绑定关联指定查询条件
 
$this->User->unbindModel('Note');
$this->User->bindModel(
    'hasMany' => array(
        'Note' => array(
            'conditions' => array(
                'Note.subject LIKE' => '%'.$keyword.'%'
            )
        )
    )
);
 
//指定主表条件获取数据
$data = $this->User->find('all',array(
    'conditions' => array(
        'User.id' => $user_id
    )
));
 
//或者
 
$data = $this->User->read(null,$user_id);

3입니다. . Cakephp의 핵심 동작(Behavior) Containable

을 사용하여 먼저 자체 AppModel 클래스를 만들고 /app/app_model.php

class AppModel extends Model {
 
    //加载核心行为
    var $actsAs = array('Containable');
 
}

파일을 만든 다음 컨트롤러에 전달할 수 있습니다. 코드 쿼리

$this->User->contain('Note.subject LIKE' => '%'.$keyword.'%');
 
$data = $this->User->find('all',array(
    'conditions' => array(
        'User.id' => $user_id
    )
));

는 다음

$data = $this->User->find('all',array(
    'conditions' => array(
        'User.id' => $user_id
    ),
    'contain' => array(
        'Note' => array(
            'conditions' => array(
                'Note.subject LIKE' => '%'.$keyword.'%'
            )
        )
    )
));

과 유사하게 find 문에 직접 작성할 수도 있습니다. 참고:

쿼리하려는 경우 {User.name 또는 Note.subject에는 키워드 키워드의 모든 레코드가 포함됩니다.}

이때 Cakephp의 find 메소드는 이 쿼리를 구현할 수 없으며, 위에서 소개한 사용자 정의 SQL 문을 다음과 같이 사용해야 합니다.

SELECT *
FROM users AS User
LEFT JOIN notes AS Note ON User.id = Note.user_id
WHERE
User.name LIKE '%keyword%'
OR
Note.subject LIKE '%keyword%'

위 내용은 Cakephp에서 연관 테이블을 조회하는 방법을 요약한 것입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.