Database 활용법 - Prev/engine-pmc GitHub Wiki

orm

engine pmc의 데이터베이스 사용은 idi orm 을 기반으로 합니다

idi orm wiki 참고

시작

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