ThinkPHP 연속 메서드 활용 가이드

1. SQL 직접 사용

2. 연속 메서드 체이닝

select()는 반드시 마지막에 호출해야 하며, 그 외 메서드는 순서에 제약이 없습니다.

2.1 alias - 테이블 별칭 설정

현재 테이블에 별칭을 부여하여 join 등 다른 연속 메서드와 함께 활용합니다.

$Dao = M('Member');
$Dao->alias('m')->join('__ORDER__ o ON o.member_id = m.id')->select();

2.2 join - 테이블 조인

지원하는 조인 유형: LEFT JOIN, RIGHT JOIN, FULL JOIN, INNER JOIN(기본값)

여러 번 호출 가능하고 테이블 별칭 사용이 가능합니다. __PREFIX__ 구문은 실제 테이블명으로 변환됩니다.

$Dao = M('Product');
$Dao->alias('p')
    ->join("INNER JOIN __CATEGORY__ c ON p.category_id = c.id")
    ->join("LEFT JOIN __BRAND__ b ON p.brand_id = b.id")
    ->select();

2.3 field - 조회/작업 필드 지정

반환할 필드를 지정하거나, 쓰기 작업 시 대상 필드를 설정합니다. find 등 모든 조회 메서드에서 사용 가능합니다.

특정 필드 선택

$Dao = M("Article");
$cols = "id,subject,body";
$Dao->field($cols)->select();

필드에 별칭 부여

$Dao = M("Article");
$cols = "id,author as writer";
$Dao->field($cols)->select();

집계 함수 활용

$Dao = M("Article");
$cols = "id,AVG(rating)";
$Dao->field($cols)->select();

배열 형태로 필드 지정

$Dao = M("Article");
$cols = array('id','subject','body');
$Dao->field($cols)->select();

배열 형태로 별칭 설정

$Dao = M("Article");
$cols = array('id','author'=>'writer');
$Dao->field($cols)->select();

전체 필드 조회

$Dao->select();
$Dao->field()->select();
$Dao->field('*')->select();
$Dao->field(true)->select();

특정 필드 제외

// password, secret 필드를 제외한 나머지 조회
$Dao->field('password,secret',true)->select();
// 또는
$Dao->field(array('password','secret'),true)->select();

2.4 where - 조건 필터링

문자열 조건

$Dao = M("Article");
$Dao->where('is_published=1 AND is_deleted=0')->select();

생성되는 SQL:

SELECT * FROM think_article WHERE is_published=1 AND is_deleted=0

배열 조건 - 일반 쿼리

$Dao = M("Article");
$filter = array();
$filter['category'] = 'tech';
$filter['is_published'] = 1;
$Dao->where($filter)->select();

생성되는 SQL:

SELECT * FROM think_article WHERE `category`='tech' AND is_published=1

배열 조건 - 표현식 쿼리

$Dao = M("Article");
$filter = array();
$filter['title'] = array('like', '%'.(string)$keyword.'%');  // 부분 일치
$filter['view_count'] = array('gt', 100);                    // 초과
$filter['score'] = array('between', array(3, 5));              // 범위
$filter['created_at'] = array('egt', $start_date);           // 이상
$Dao->where($filter)->select();

SQL 문 확인하기

개발 중 실행된 SQL을 확인하려면 getLastSql()을 사용합니다.

$Dao = M("Inventory");
$cols = "i.*,u1.realname as creator,u2.realname as modifier";

$result = $Dao->alias('i')
    ->where("i.warehouse_id = 5")
    ->field($cols)
    ->select();

$executed_sql = $Dao->getLastSql();
var_dump($executed_sql);

태그: ThinkPHP PHP Query Builder ORM Database

6월 19일 03:03에 게시됨