처음부터 차근차근
Model과 View, 데이터베이스 연동 본문
Model
model은 주로 데이터베이스와 연동해서 작업하는 일을 한다.
그래서 보통 하나의 테이블 당 하나의 model 파일을 만드는 것이 좋다.
model 파일의 명명 규칙은 '파일이름_m'이다.
파일 이름의 첫 글자는 대문자로 한다.
View
view는 화면에 출력하는 역할을 한다.
views 파일 아래에다 view파일을 만들고,
view 파일의 명명 규칙은 _v이런거 안붙이고 그냥 '파일이름'이다.
파일 이름의 첫 글자는 소문자로 한다.
Mysql 연동
application > config > 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가지가 있다.
- autoload 이용하는 방법
- 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();
$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안의 메서드를 호출한다.
model('Page_m')으로 model class를 로드하면 알아서 Page_m이라는 이름으로 객체가 생성된다.
그래서 그 객체를 이용하여 Page_m안에 있는 getLists()메서드를 호출을 하고, 그 리턴값을 data변수에다 대입하겠다는 뜻이다.
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 |