강좌게시판

제목 ORM 라이브러리 DMZ 강좌 1부 : 소개
글쓴이 케이든 작성시각 2009/08/23 14:10:40
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 22730   RSS
CodeIgniter ORM Library 중에 하나인 DMZ 에 대하여 강좌를 시작할까 합니다.

유저가이드를 여러번 읽어봣지만 실력부족으로 고급기능 쪽은 이해못하는 부분이 많아서

강좌가  몇부로 나눠질지는 아직 모르겠습니다.

제 1부는 CI에서 DMZ가 어떠한 방법으로 사용되는지 설명합니다.


CodeIgniter에 ORM 라이브러리가 DMZ, DataMapper 이렇게 2개가 있습니다.

한개 더 있는데 링크가 사라졌네요 - -

DMZ를 제외한 2개는 현재 개발이 멈춘 상태입니다. dataMapper을 이어받아 현재 계속 개발중인게 DMZ입니다.

고로 유일하다고 볼수있습니다.


DMZ을 사용하는 장점은..

첫째 db를 오브젝트화 시켜서 다룰수있고 (테이블과 model이 1:1 입니다),

둘째 insert나 update 할때 값을 db에 넣기전에 검증을 할수있습니다.

셋째 테이블과 테이블의 relationship을 다루기가 간단합니다.

물론 active record를 기반으로 만들어졌고 동일하게 사용할수있습니다. ( 모든 active record method, chaning 사용 가능)

잡소리 접고 바로 코딩을 봅시다.

1. DB에 데이터 입,출력

먼저 기본적인 데이터를 저장하고 부르는것부터 비교해 보겠습니다.

A. insert data

- Active Record -
// user 입력
$this->db->set('username', 'kaden');
$this->db->set('password', 'nedak');
$this->db->set('email', 'kaden@@kad.en');
$this->db->insert('users');

- DMZ -
// user 입력
$u = new User();
$u->username = 'kaden';
$u->password = 'nedak';
$u->email = 'kaden@@kad.en';
$u->save();

이처럼 테이블에 있는 필드를 오브젝트화 시켜서 관리하게 됩니다.

B. select data

- Active Record -
$this->db->where('username','kaden');
$this->db->get('users');

- DMZ -
$u = new User();
$u->where('username','kaden');
$u->get();

// or
$u = new User();
$u->get_by_username('kaden');

DMZ 에서 아래코드처럼 get_by_{필드명}(); 함수로 바로 불러올수 있습니다.

요게 참 매력적이더군요.
 

2. relationship 설정

relationship 은 다른 테이블을 서로 연관지어 관리 하게 됩니다

종류에는

one to one,

one to many,

many to many 총 3가지가 있습니다.

조금 더 나아가서는

self relationship,

multi relationship 이 있습니다.

1. one to one

worker 테이블과 workplace 테이블이 있다고 합시다.

worker 는 한곳의 workplace에서만 일을 할수있고,

workplace에는 한명의 worker만 일을 할수있다고 하면 one to one 관계가 형성됩니다.

제가 JOIN은 약해서 Active Record 예제는 없이 하겠습니다.

- DMZ -
// call user kaden
$w = new Worker();
$w->get_by_name('kaden');

// call workplace 우리집 마당
$p = new Workplace();
$p->where('location','우리집 마당');
$p->get();

// set up one to one relationship
$w->save($p);

이렇게 하면 kaden과 우리집 마당의 relationship이 이루어집니다.

물론 조인테이블이 하나 더 있거나 user나 workplace 테이블에 workplace_id 또는 user_id 필드가 있어야 겠지요

이부분은 나중에 다른 강좌에서 깊게 파고 들겠습니다.


이제 kaden이 어디서 일하는지 봅시다.
// call kaden
$w = new Worker();
$w->get_by_name('kaden');

// call related workplace
$w->workplace->get();
echo $w->workplace->location;  // '우리집 마당'

참 쉽죠잉

이처럼 woker만 부르면 worker에 related 된 다른 테이블의 값을 쉽게 가져와서 다룰수있습니다.


맛보기로 여기까지 하구요.

다음 강좌에는 다시 기초로 돌아가서  설정법, db규칙, 검증부터 하나씩 파고 들겠습니다

위 예제는 이미 DMZ사이트에 있는 내용이므로 더 궁금 하신분은 DMZ 사이트 가시면 자세히 나와있습니다


태그 orm,DMZ,강좌
 다음글 CI로 20분 만에 블로그 만들기(정식) (37)
 이전글 CI 로 20분만에 blog 만들기 리허설 버전 (15)

댓글

변종원(웅파) / 2009/08/23 21:47:02 / 추천 0
흠.. get_by_{필드명}(); 직관적이네요. ^^
emc / 2009/08/28 00:06:40 / 추천 0
 저는 그냥 sql문이 더 가독성이 있어서, 아직 orm은 아직 익숙하지 않네요.
ci의 active record 사용하는 것도 아직 버겁구요.

최용운 / 2009/09/01 21:00:28 / 추천 0
 좋은 내용입니다. 좀더 자세히 살펴볼 필요가 있겠네요 .