모델 Models¶
모델은 전통적인 MVC 패턴을 구현하고자 하는 사람들이 선택적으로 사용할 수 있습니다.
Page Contents
모델이란 무엇인가 What is a Model?¶
모델은 데이터베이스와 연동하여 사용하기위한 PHP 클래스입니다. 예를들이, CodeIgniter 를 이용하여 블로그를 관리한다고합시다. 아마 삽입,조회,수정 등의 기능을 가진 모델클래스가 필요할 것입니다.
모델클래스의 형태 예제:
class Blog_model extends CI_Model {
public $title;
public $content;
public $date;
public function __construct()
{
// Call the CI_Model constructor
parent::__construct();
}
public function get_last_ten_entries()
{
$query = $this->db->get('entries', 10);
return $query->result();
}
public function insert_entry()
{
$this->title = $_POST['title']; // please read the below note
$this->content = $_POST['content'];
$this->date = time();
$this->db->insert('entries', $this);
}
public function update_entry()
{
$this->title = $_POST['title'];
$this->content = $_POST['content'];
$this->date = time();
$this->db->update('entries', $this, array('id' => $_POST['id']));
}
}
Note
위의 함수들은 쿼리 빌더(Query Builder) 를 이용하여 데이터베이스를 이용하는 방법을 보여줍니다.
Note
이 예제에서는 단순화하기 위하여 $_POST 를 바로 사용하였습니다. 일반적으로는 나쁜 예죠. 일반적인 접근법은 입력클래스(Input Library)를 다음과 같이 사용하는 것입니다. $this->input->post('title').
모델의 해부 Anatomy of a Model¶
모델클래스는 application/models/ 폴더에 저장됩니다. 서브 폴더에 저장하셔도 됩니다.
모델클래스의 기본 프로토타입 예:
class Model_name extends CI_Model {
public function __construct()
{
parent::__construct();
}
}
Model_name 은 여러분의 클래스 이름으로 바꾸세요. 클래스이름의 첫 글자는 반드시 대문자로 시작해야하며 나머지 글자들은 소문자라야 합니다. 여러분의 클래스는 반드시 Model 클래스에서 상속(extends)받아야 합니다.
파일명은 클래스명과 같아야 합니다. 예를 들면:
class User_model extends CI_Model {
public function __construct()
{
parent::__construct();
}
}
파일명은 아래와 같아야 합니다:
application/models/User_model.php
모델 로딩하기 Loading a Model¶
모델은 일반적으로 컨트롤러(controller) 내에서 로드되어 호출됩니다. 모델은 아래와 같은 방법으로 로드합니다:
$this->load->model('model_name');
모델이 하위 폴더에 있다면 상대경로로 모델 폴더를 적어줍니다. 예를 들어 모델이 application/models/blog/Queries.php 경로에 위치해 있다면 아래와 같이 로드할 수 있습니다.
$this->load->model('blog/queries');
모델이 로드되면 모델클래스의 이름과 같은 객체로 모델 내의 함수를 사용할 수 있습니다:
$this->load->model('model_name');
$this->model_name->method();
모델을 다른 객체 이름으로 할당하여 사용하고 싶다면 두 번째 파라미터에 사용하고 싶은 이름을 넘겨서 로드하시면 됩니다:
$this->load->model('model_name', 'foobar');
$this->foobar->method();
아래는 모델을 로드하여 그 데이터를 뷰에 넘겨주는 예제입니다:
class Blog_controller extends CI_Controller {
public function blog()
{
$this->load->model('blog');
$data['query'] = $this->blog->get_last_ten_entries();
$this->load->view('blog', $data);
}
}
모델 자동로딩 Auto-loading Models¶
프로그램 전체에 걸쳐 글로벌로 모델을 로드해야할 경우라면 자동로드 설정을 통해 자동으로 로드하도록 할 수 있습니다. application/config/autoload.php 파일을 열어서 autoload 배열에 원하는 모델을 추가하세요.
데이터베이스에 연결하기 Connecting to your Database¶
모델이 로드되었을 때 그 모델이 자동으로 데이터베이스에 연결하지는 않습니다. 다음의 옵션을 사용하여 연결하세요:
표준 데이터베이스 메소드(상세설명)를 이용하여 컨트롤러나 모델에서 데이터베이스에 연결할 수 있습니다.
모델을 로드할 때 세 번째 파라미터를 TRUE (boolean)로 설정하여 자동연결할 수 있습니다. 이때 database config 파일에 설정된 정보가 사용될것입니다:
$this->load->model('model_name', '', TRUE);
세 번째 파라미터로 데이터베이스 연결정보를 넘겨주어서 연결할 수도 있습니다:
$config['hostname'] = 'localhost'; $config['username'] = 'myusername'; $config['password'] = 'mypassword'; $config['database'] = 'mydatabase'; $config['dbdriver'] = 'mysqli'; $config['dbprefix'] = ''; $config['pconnect'] = FALSE; $config['db_debug'] = TRUE; $this->load->model('model_name', '', $config);