Database 활용법 - Prev/engine-pmc GitHub Wiki
orm
engine pmc의 데이터베이스 사용은 idi orm 을 기반으로 합니다
시작
DBHandler::for_table('테이블명')
로 테이블 선택
<?php
DBHandler::for_table('테이블명')
->select('*')
->find_many();
?>
SELECT
특정 컬럼 가져오기
select(컬럼) 혹은 select_many(컬럼1, 컬럼2, ...)
조건
- where(컬럼, 값) : 해당 컬럼의 값이 '해당 값' 인 내용을 불러옴
- where_equal(컬럼, 값) :
where('컬럼', '값')
과 같음 - where_not_equal(컬럼, 값) : 해당 컬럼의 값이 '해당 값' 이 아닌 내용을 불러옴
- where_like(컬럼, 값) : WHERE LIKE 문법과 비슷
- where_not_like(컬럼, 값) : where_like 반대
- where_gt(컬럼, 값) : grater than(>), '해당 값'보다 더 큰 데이터를 불러옴
- where_lt(컬럼, 값) : less than(>), '해당 값'보다 더 작은 데이터를 불러옴
- where_gte(컬럼, 값) : grater than or equal(>=), '해당 값'보다 더 크거나 같은 데이터를 불러옴
- where_lte(컬럼, 값) : less thanor equal (>=), '해당 값'보다 더 작거나 같은 데이터를 불러옴
- where_null(컬럼) : 해당 컬럼이 null인 데이터를 불러옴
- where_not_null(컬럼) : 해당 컬럼이 null이 아닌 데이터를 불러옴
조건을 여러개 걸려면 where@#$ 함수를 여러번 호출하면됨
제한
- limit(갯수) :
LIMIT 갯수
와 같음 - limit(시작, 갯수) :
LIMIT 시작 갯수
와 같음, *2번째 인자는 end index가 아닌 갯수임
정렬
- order_by_asc(컬럼) : 오름차순 정렬
- order_by_desc(컬럼) : 내림차순 정렬
데이터 로드
- find_one() : 데이터 한줄 불러옴
- find_many() : 데이터 여러줄 불러옴 (배열)
조인
- join(테이블, constraint)
<?php
join('테이블2', array(
'테이블2.컬럼','=','테이블.컬럼'
))
?>
예제
<?php
DBHandler::for_table('article')
->select('*')
->where('board_id', $this->boardId)
->find_many();
// 일반적인 쿼리
$query = "SELECT * FROM article WHERE board_id='{$this->boardId}'";
?>
<?php
DBHandler::for_table('menu')
->select_many('title', 'extra_vars')
->where('title', $selectedMenu)
->find_one();
// 일반적인 쿼리
$query = "SELECT title, extra_vars FROM menu WHERE title='{$selectedMenu}'";
?>
<?php
DBHandler::for_table('article')
->select_many('article.*', 'user.user_name')
->where('article.board_id', $this->boardId)
->join('user', array(
'user.id','=','article.writer_id'
))
->order_by_asc('article.top_no')
->order_by_asc('article.order_key')
->limit($limitNum, $this->aop)
->find_many();
// 일반적인 쿼리
$query = "
SELECT article.*, user.user_name
FROM article, user
WHERE article.board_id='{$this->boardId}'
AND user.user_id = article.writer_id
ORDER BY article.top_no ORDER BY article.order_key
LIMIT {$limitNum} {$this->aop}";
?>
<?php
DBHandler::for_table('article')
->select_many('article.*', 'board.*', 'user.nick_name')
->where('article.no', $articleNo)
->join('board', array(
'board.id', '=', 'article.board_id'
))
->join('user', array(
'user.id', '=', 'article.writer_id'
))
->find_one();
// 일반적인 쿼리
$query = "
SELECT article.*, board.*, user.nick_name
FROM article, board, user
WHERE article.no='{$articleNo}'
AND board.id = article.board_id
AND user.id = article.writer_id";
?>
INSERT
시작
DBHandler::for_table(테이블명)->create() 로 레코드 생성
데이터 설정
- set(컬럼, 값) : 단일 데이터 설정
- set(배열) : 다중 데이터 설정
<?php
->set('컬럼1', '데이터1');
->set(array(
'컬럼1' => '데이터1',
'컬럼2' => '데이터2'
))
?>
삽입
->save() 로 레코드 삽입
예제
<?php
$record = DBHandler::for_table('article')->create();
$record->set('board_id', 1);
$record->save();
// 일반적인 쿼리
$query = "INSERT INTO article (board_id) VALUES ('1')";
?>
<?php
$logRecord = DBHandler::for_table('login_log')->create();
$logRecord->set(array(
'ip_address' => $ipAdress,
'input_id' => $inputId,
'succeed' => $succeed,
'auto_login' => $autoLogin
));
$logRecord->save();
// 일반적인 쿼리
$query = "INSERT INTO login_log(ip_address, input_id, succeed, auto_login)
VALUES ('{$ip_address}', '{$input_id}', '{$succeed}', '{$autoLogin}')";
?>
UPDATE
요약
SELECT 처럼 데이터를 불러오고 INSERT 처럼 데이터 저장
예제
<?php
$user = DBHandler::for_table('user')
->where('id', $userId)
->find_one();
$user->set('last_logined_ip', $ipAddr);
$user->save();
// 일반적인 쿼리
$query = "UPDATE user SET id = '{$userId}')";
?>
DELETE
요약
UPDATE 와 비슷하게 처리
예제
<?php
DBHandler::for_table('session')
->where('session_key', $sessionKey)
->delete_many();
// 일반적인 쿼리
$query = "DELETE FROM session WHERE session_key = '{$sessionKey}')";
?>
특수 함수
getData 함수
find_one()
함수는 object
가 아닌 DBHandler
클래스를 반환한다.
DBHandler->user_name
처럼 데이터를 받아 올 수는 있지만 var_dump
등으로 DBHandler
출력시 데이터를 바로 보기 힘드므로 데이터를 바로 볼 때 getData()
함수를 사용 할 수 있다.
<?php
$data = DBHandler::for_table('테이블명')
->find_one();
var_dump($data->getData());
find_many()
함수는 DBHandler
들의 배열을 출력한다.
getQuery 함수
디버깅등을 할때 이용할때 원본 쿼리를 알고싶으면 find_one()
, find_many()
등을 실행하기 전 getQuery()
함수를 사용하여 원본 쿼리를 알 수 있다.
<?php
$query= DBHandler::for_table('테이블명')
->where('id', $id);
var_dump($query->getQuery());