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);