[기초정리 잘 됨] [PHP] Codeigniter (코드이그나이터) Model

[기초정리 잘 됨] [PHP] Codeigniter (코드이그나이터) Model

Programming/PHP

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 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 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 title?> contents?>

Application/views/test_list.php

1 2 3 4 5 6 7 8 9 title?>

위 예제를 접속하면 다음과 같이 나옵니다.

아래는 데스트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

from http://sugerent.tistory.com/538 by ccl(A) rewrite - 2020-04-02 13:26:42