처음부터 차근차근

Model과 View, 데이터베이스 연동 본문

Framework/CodeIgniter

Model과 View, 데이터베이스 연동

_soyoung 2021. 10. 9. 01:25
반응형
Model

 

model은 주로 데이터베이스와 연동해서 작업하는 일을 한다.

그래서 보통 하나의 테이블 당 하나의 model 파일을 만드는 것이 좋다.

model 파일의 명명 규칙은 '파일이름_m'이다.

파일 이름의 첫 글자는 대문자로 한다.

 

 

 

 

View

 

view는 화면에 출력하는 역할을 한다.

views 파일 아래에다 view파일을 만들고,

view 파일의 명명 규칙은 _v이런거 안붙이고 그냥 '파일이름'이다. 

파일 이름의 첫 글자는 소문자로 한다.

 

 

 

 

Mysql 연동

 

application > config > database.php 로 가서 설정 값을 바꿔줘야 한다.

database.php

hostname : 호스트 컴퓨터의 ip

username : 데이터베이스 username(초반에 db깔 때 만들었던 name)

password : 데이터베이스 비밀번호

database : 데이터베이스 이름

dbdriver : 데이터베이스 driver

system > database > drivers 에 보면 driver이 나온다.

그 중 자신이 원하는 driver을 입력하면 된다.

port : mysql의 포트번호

mysql 포트번호 알아내는 방법 ->

2021.10.11 - [개발도구/Bitnami] - Bitnami wamp에서 mariadb깔리는 이유와 mariadb에서 mysql 포트번호 확인하기

 

 

+ database.php 파일은 중요한 정보를 담고 있는 파일이다.

그러므로 버전관리시스템을 사용하면 원격 저장소에 이 파일이 노출되지 않도록 ignore에 관리해야 한다.

 

 

 

 

database library 로드 하는 법

 

데이터베이스 라이브러리를 로드하는 방법에는 2가지가 있다.

  1. autoload 이용하는 방법
  2. controller에다 직접 로드하는 방법

 

1. autoload를 통해 데이터베이스 라이브러리 로드

application > config > autoload.php 로 가서 아래의 코드를 찾는다.

$autoload['libraries'] = array();

array 괄호 안에다가 'database'를 적는다.

$autoload['libraries'] = array('database');

이렇게 하면 Codelgniter가 시작될 때 자동으로 database와 관련된 library를 로드한다.

그래서 이걸 쓰면 더 이상 db로드를 신경쓰지 않아도 된다.

하지만 웹 애플리케이션이 db를 별로 쓰지 않는다면 필요할 때 직접 database library를 로드하는 것이 성능적으로 더 좋다.

 

 

2. controller을 통한 방법

controller로 가서 index()메서드 안에다 database()메서드를 로드한다.

$this->load->database();

controller

$this는 현재 클래스 객체를 뜻한다.

load는 CI_Loader클래스의 객체이다.

controller 객체 안의 CI_Loader 클래스 객체(load) 안의 database()라는 메서드를 사용하겠다는 뜻이다.

->를 사용하는 이유는 포인터이기 때문이다.

c언어에서 구조체 포인터 안의 값에 접근 할 때 ->를 쓰는데 그것과 비슷하다고 생각하면 편하다.

 

 

 

 

model 파일 controller에 로드하는 방법
$this->load->model('page_model');

규칙 :  파일 이름을 적을 때 .php는 생략한다.

이렇게 하면 php가 models 아래에 있는 page_model.php를 읽어서 그 안의 Page_model class를 로드한다.

 

 

 

 

view 파일 controller에 로드하는 방법
$this->load->view('view파일이름');

php가 views 폴더 아래에 있는 view파일을 출력한다.

마찬가지로 view 파일 이름에 .php는 생략한다.

* 주의할 점 : view파일이름에 들어가는 것은 반드시 php파일이어야 한다.(html 안됨)

당연한건줄 알지만 생각보다 이것때문에 오류가 많이 생김

 

 

 

 

query 작성해서 데이터베이스에서 정보 뽑아오기

 

controller안에서 model 파일을 로드한 후 model class안의 메서드를 호출한다.

controller

model('Page_m')으로 model class를 로드하면 알아서 Page_m이라는 이름으로 객체가 생성된다.

그래서 그 객체를 이용하여 Page_m안에 있는 getLists()메서드를 호출을 하고, 그 리턴값을 data변수에다 대입하겠다는 뜻이다.

model

db는 CI_DB_query_builder 클래스의 객체(CI_DB_driver클래스 상속받음)이다.

db 객체 안의 query()메서드(CI_DB_driver클래스 멤버 함수)를 사용하겠다는 뜻이다.

그리고 그 결과값을 result()메서드를 이용해서 객체의 형태로 리턴한다.

 

리턴형

result() : 객체

result_array() : 배열

row() : 한 행

 

 

 

 

class 생성자

 

생성자

__contruct()는 생성자이다.

PHP에서 내부적으로 Page_model class를 생성할 때 __construct() 안에 있는 코드가 가장 먼저 실행된다.

parent::__construct()는 부모 클래스의 __construct()를 호출하는 것이다.

Page_m class는 CI_Model class를 상속받았기 때문에 생성자를 호출할 때 CI_Model class의 생성자를 호출해줘야 한다.

(자식 클래스 생성자가 호출될 때 부모 클래스의 생성자도 호출되기 때문)

 

 

 

 

Active record문

 

Active record는 표준 sql문이다.

이것을 사용하면 다른 데이터베이스와 이식성이 뛰어나서 데이터베이스를 변경할 때(ex : mysql -> oracledb) 굳이 안에 있는 코드까지 변경할 필요가 없다.

CodeIgniter는 수정된 형태의 액티브 레코드 데이터베이스 패턴(Active Record Database Pattern)을 사용한다.

 

<간단한 예시>

1. 조회

$query = $this->db->get('tablename');

==

SELECT * FROM tablename

 

$query = $this->db->get_where('tablename', array('id' => $id));

==

SELECT * FROM tablename where id=$id

 

2. 삽입

$data = array(
   'title' => 'title~' ,
   'description' => 'My description.....' 
);
$this->db->insert('tablename', $data);
==
INSERT INTO tablename (title, description) VALUES ('title~', 'My description.....')

 

3. 삭제

$this->db->delete('tablename', array('id' => $id));
==
DELETE FROM tablename WHERE id = $id

 

 

사이트 : http://www.ciboard.co.kr/user_guide/kr/database/query_builder.html

 

Query Builder Class ‐ 코드이그나이터 3.0 한글매뉴얼

TRUE on success, FALSE on failure

www.ciboard.co.kr

 

 

 

 

 

 

 

출처 : 'CodeIgniter - 생활코딩' 변형 및 요약

반응형

'Framework > CodeIgniter' 카테고리의 다른 글

Helper  (0) 2021.10.13
URI 매핑 변경하기  (0) 2021.10.12
Bootstrap  (0) 2021.10.10
Codelgniter 파일 구조와 Controller, Veiw  (0) 2021.10.06
Framework와 CodeIgniter  (0) 2021.10.06
Comments