CI의 Model에 대해서 정리합니다.
MVC 디자인 패턴에서 M인 Model은 데이터를 담당합니다.
데이터란 보통 데이터베이스를 말하고 있습니다.
데이터를 다루는 로직을 따로 모델로 모아두어 데이터의 입출력과 화면을 관리하는 뷰를 격리 시켜
좀 더 편리하게 작업할 수 있는 환경을 그리고 호환성있게 만들어줄수 있습니다.
1. 데이터베이스 설정
Model을 사용하기 위해 CI의 데이터베이스 설정입니다.
Application/config/database.php 파일을 수정해야합니다.
주요 내요한 몇가지 설정만 해주시면 됩니다.
hostname : 데이터베이스 서버의 주소
username : 데이터베이스 사용자의 이름
password : 데이터베이스 비밀번호
database : 데이터베이스 명
dbdriver : 데이터베이스의 종류로 지원되는 드라이브의 목록은 system/database/drivers 디렉토리명을 참고한다.
※주의사항
데이터베이스 설정 파일에는 데이터베이스 서버에 접속 할 수 있는 정보를 그대로 입력하기 때문에
노출되서는 안됩니다. 따라서 버전관리를 사용하실때에는 제외해야합니다.
2. 데이터베이스 라이브러리 로드
CI에서 데이터베이스를 사용하기 위해서는 먼저 데이터베이스 라이브러리를 로드해야합니다.
CI에서는 2가지 방법을 제공해주고 있습니다.
1. application/config/autoload.php 파일의 $autoload['libraries'] 배열에 'database'를 추가한다.
2. controller 내에서 $this->load->database()를 호출한다.
※저는 2번째 방법으로 진행했습니다.
3. 모델 파일 생성
Model 파일은 Application/models 디렉토리 아래에 '모델명_model.php'의 형식으로 파일을 생성해주면 됩니다. Model 파일은 CI_Model을 상속받아야 합니다. 또한 클래스 명은 '모델명_model' 이어야 하며 첫글자는 대문자로 하셔야 합니다.
단순한 쿼리를 사용하기위해서는 아래와 같이 합니다.
$this->db->query("SELECT * FROM test");
쿼리의 결과를 가져오려면 아래와 같이 하시면 됩니다.
$this->db->query("SELECT * FROM test")->result();
result()는 쿼리의 결과를 가져오는 방법입니다.
연관배열의 형태로 결과를 가져오는 방법은 result_array()의 형태입니다.
결과가 한 행이라면 row()를 사용하셔도 좋습니다.
또한 CI에서는 Active Record라는 기능을 제공해줍니다.
Active Record는 좀 더 프로그래밍적으로 데이터베이스를 제어하는 방법으로
Active Record를 이용하면 표준 SQL을 생성 할 수 있어서 이식성이 좋아집니다.
Active Record 매뉴얼 : http://codeigniter-kr.org/user_guide_2.1.0/database/active_record.html
4.모델 사용
Model를 이용해 데이터를 조작하는 로직을 메소드로 정의하고
메소드는 Controller를 통해서 사용하면 됩니다.
모델을 사용하기 위해서는 먼저 모델을 로드합니다.
$this->load->model('모델파일이름');
모델의 메소드 호출하는 방법
$test_list = $this->test_model->gets();
-예제-
지난 포스팅에 했던 view에서 모델을 추가하여 작업하였습니다.
모델을 테스트하기 위해 다음과 같은 형식의 데이터베이스의 테이블을 생성했습니다.
1 2 3 4 5 | create table test( seq int not null primary key, title varchar(255) not null, contents text not null, regdate datetime not null); |
Application/controllers/test.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <?php if ( ! defined( 'BASEPATH' )) exit ( 'No direct script access allowed' ); class Test extends CI_Controller { public function __construct() { parent::__construct(); $this ->load->database(); $this ->load->model( 'test_model' ); } public function index() { $this ->load->view( 'header' ); $test_list = $this ->test_model->gets(); $this ->load->view( 'test_list' , array ( 'test_list' => $test_list )); $this ->load->view( 'test' ); $this ->load->view( 'footer' ); } public function Some( $parameter ) { $this ->load->view( 'header' ); $test_list = $this ->test_model->gets(); $this ->load->view( 'test_list' , array ( 'test_list' => $test_list )); $test_item = $this ->test_model->get2( $parameter ); $this ->load->view( 'some' , array ( 'test_item' => $test_item )); $this ->load->view( 'footer' ); } } ?> |
Application/models/test_model.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?php class Test_model extends CI_Model{ function __construct() { parent::__construct(); } function gets(){ $strQuery = "SELECT * FROM test" ; return $this ->db->query( $strQuery )->result(); } function get1( $seq ){ $strQuery = "SELECT * FROM test where seq = " . $seq ; return $this ->db->query( $strQuery )->result(); } function get2( $seq ){ return $this ->db->get_where( 'test' , array ( 'seq' => $seq ))->row(); } } ?> |
Application/views/.php
1 2 3 4 5 6 | <article> <h1><?= $test_item ->title?></h1> <div> <h2><?= $test_item ->contents?></h2> </div> </article> |
Application/views/test_list.php
1 2 3 4 5 6 7 8 9 | <ul> <?php foreach ( $test_list as $entry ){ ?> <li><a href= "/Study/index.php/test/some/<?=$entry->seq?>" ><?= $entry ->title?></a></li> <?php } ?> </ul> |
위 예제를 접속하면 다음과 같이 나옵니다.
아래는 데스트2의 타이틀을 클릭했을때 나오는 화면입니다.
데이터베이스에 들어가 있는 내용이 잘 나오는 것을 확인 할 수 있습니다.
※참고자료
Opentutorial - 생활코딩 Controller 편 : http://opentutorials.org/module/327/3827
Codeigniter Manual : http://codeigniter-kr.org/user_guide_2.1.0/general/models.html
#제 블로그 보다 Opentutoril의 생활코딩에 올라온 자료가 더 좋습니다.
공부하면서 정리하는 내용입니다.
-
Reference: http://yoshikixdrum.tistory.com/162
'Programming > PHP' 카테고리의 다른 글
How to read a value from JSON using PHP? (0) | 2017.07.27 |
---|---|
[기초 정리] PHP Framework, CodeIgniter 시작하기 [2부] (0) | 2017.07.21 |
[Codeigniter DB 연동] 2. Codeigniter 셋팅 (0) | 2017.07.21 |
[확인 안됨] 배열 stdclass <-> array 변환 (0) | 2017.07.21 |
CodeIgniter GET And POST Form Input Method (0) | 2017.07.21 |
댓글