CodeIgniter User Guide Version 2.1.0


모델Models

모델은 전통적인 MVC 패턴을 구현하고자하는사람들이 선택적으로 사용할 수 있습니다.

What is a Model?

모델은 데이터베이스와 연동하여 사용하기위한 PHP 클래스입니다. 예를들이, CodeIgniter 를 이용하여 블로그를 관리한다고합시다. 아마 삽입,조회,수정 등의 기능을 가진 모델클래스가 필요할것입니다.

모델클래스의 형태 예제:

class Blogmodel extends CI_Model {

    var $title   = '';
    var $content = '';
    var $date    = '';

    function __construct()
    {
        // Call the Model constructor
        parent::__construct();
    }
    
    function get_last_ten_entries()
    {
        $query = $this->db->get('entries', 10);
        return $query->result();
    }

    function insert_entry()
    {
        $this->title   = $_POST['title']; // please read the below note
        $this->content = $_POST['content'];
        $this->date    = time();

        $this->db->insert('entries', $this);
    }

    function update_entry()
    {
        $this->title   = $_POST['title'];
        $this->content = $_POST['content'];
        $this->date    = time();

        $this->db->update('entries', $this, array('id' => $_POST['id']));
    }

}

Note: 위의 함수들은 액티브레코드(Active Record) 를 이용하여 데이터베이스를 이용하는 방법을 보여줍니다

Note: 이예제에서는 단순화하기위하여 $_POST 를 바로 사용하였습니다. 일반적으로는 나쁜예죠. 일반적인 접근법은 Input 클래스 를 다음과 같이 사용하는것 입니다 .$this->input->post('title')

모델의 해부

모델클래스는application/models/ 폴더에 저장됩니다. 서브폴더에 저장하셔도 됩니다.

모델클래스의 기본 프로토 타입예:

class Model_name extends CI_Model {

    function __construct()
    {
        parent::__construct();
    }
}

Model_name 은 여러분의 클래스 이름으로 바꾸세요. 클래스이름의 첫글자는 반드시 대문자로 시작해야하며 나머지 글자들은 소문자라야 합니다. 여러분의 클래스는 반드시 Model 클래스에서 상속(extends)받아야 합니다.

파일명은 클래스명과 같아야하나 모두 소문자여야 합니다.

예를들어 클래스가 아래와같다면:

class User_model extends CI_Model {

    function __construct()
    {
        parent::__construct();
    }
}

파일명은 아래와 같아야합니다:

application/models/user_model.php

모델 로드하기

모델은 일반적으로 컨트롤러 내에서 로드되어 호출됩니다. 모델은 아래와 같은 방법으로 로드합니다:

$this->load->model('Model_name');

모델이 하위폴더에 있다면 상대경로로 모델폴더를 적어줍니다.예를 들어 모델이 application/models/blog/queries.php 경로에 위치해있다면 아래와같이 로드할수 있습니다:

$this->load->model('blog/queries');

모델이 로드되면 모델클래스의 이름과 같은 객체로 모델내의 함수를 사용할수 있습니다.

예제:

$this->load->model('Model_name');

$this->Model_name->function();

모델을 다른객체이름으로 할당하여 사용하고싶다면 두번째 파라미터에 사용하고싶은 이름을 넘겨서 로드하시면됩니다예:

$this->load->model('Model_name', 'fubar');

$this->fubar->function();

아래는 모델을 로드하여 그 데이터를 뷰에 넘겨주는 예제입니다:

class Blog_controller extends CI_Controller {

    function blog()
    {
        $this->load->model('Blog');

        $data['query'] = $this->Blog->get_last_ten_entries();

        $this->load->view('blog', $data);
    }
}

모델 자동로드

프로그램 전체에 걸쳐 글로벌로 모델을 로드해야할경우라면 자동로드 설정을 통해 자동으로 로드하도록 할수 있습니다. application/config/autoload.php 파일을 열어서 autoload 배열에 원하는 모델을 추가하세요.

데이터베이스 연결

모델이 로드되었을때 그 모델이 자동으로 데이터베이스에 연결하지는 않습니다.다음의 옵션을 사용하여 연결하세요.