Codeigniter 활성 레코드: 삽입, 선택, 업데이트, 삭제
데이터는 대부분의 애플리케이션의 혈통입니다. 데이터는 통찰력을 제공하고 비즈니스 결정을 용이하게 하기 위해 추가 분석이 가능한 방식으로 저장되어야 합니다. 데이터는 일반적으로 데이터베이스에 저장됩니다. 데이터베이스와 상호 작용할 때 가장 우려되는 사항 중에는 보안, 액세스 용이성 및 데이터베이스 공급업체별 SQL(구조적 쿼리 언어) 구현이 있습니다.
액티브 레코드는 쉽고 안전하며 설득력 있는 방식으로 데이터베이스와 쉽게 상호 작용할 수 있도록 하는 디자인 패턴입니다.
활성 레코드에는 다음과 같은 장점이 있습니다.
- 활성 레코드의 간단한 메소드 체인을 사용하여 레코드 삽입, 업데이트 및 삭제
- 매개변수를 사용하여 안전한 방식으로 사용자 입력을 제출합니다.
- 다음과 같은 여러 데이터베이스 엔진으로 작업할 수 있습니다. MySQL, SQL Server 등을 애플리케이션 코드를 다시 작성하지 않고
- CodeIgniter는 백그라운드에서 각 데이터베이스 엔진에 특정한 드라이버를 사용합니다.
액티브 레코드 사용 방법: 예시
이 튜토리얼에서는 튜토리얼 데이터베이스를 논의합니다. 두 개의 테이블이 있는데, 하나는 주문이고 다른 하나는 세부 정보가 있습니다.
이 튜토리얼에서는 MySQL 데이터베이스가 설치되어 실행 중입니다.
다음 스크립트를 실행하여 튜토리얼 데이터베이스를 만드세요.
CREATE SCHEMA ci_active_record; USE ci_active_record; CREATE TABLE `order_details` ( `id` int(11) NOT NULL AUTO_INCREMENT, `order_id` int(11) DEFAULT NULL, `item` varchar(245) DEFAULT NULL, `quantity` int(11) DEFAULT '0', `price` decimal(10,2) DEFAULT '0.00', `sub_total` decimal(10,2) DEFAULT '0.00', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT = 1; CREATE TABLE `orders` ( `id` int(11) NOT NULL AUTO_INCREMENT, `date` timestamp NULL DEFAULT NULL, `customer_name` varchar(245) DEFAULT NULL, `customer_address` varchar(245) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT = 1;
위의 코드는 ci_active_record라는 데이터베이스를 만들고 orders와 order_details라는 두 테이블을 만듭니다. 두 테이블 간의 관계는 orders의 열 id와 order_details 테이블의 order_id로 정의됩니다.
CodeIgniter 데이터베이스 구성
이제 이 데이터베이스와 통신할 수 있도록 애플리케이션을 구성하겠습니다.
application/config/database.php에 있는 데이터베이스 구성 파일 열기
구성 파일에서 다음 줄을 찾으세요
'hostname' => 'localhost', 'username' => '', 'password' => '', 'database' => '',
위 코드를 다음으로 업데이트하세요.
'hostname' => 'localhost', 'username' => 'root', 'password' => 'letmein', 'database' => 'ci_active_record',
참고 : 사용자 이름과 비밀번호를 구성과 일치하는 것으로 바꿔야 합니다. MySQL.
데이터베이스 구성 세부 정보 외에도 CodeIgniter가 로드할 때 데이터베이스 라이브러리를 로드하도록 지시해야 합니다.
단계 1) 다음 파일 application/config/autoload.php를 엽니다.
단계 2) $autoload 배열 키 라이브러리를 찾고 아래와 같이 데이터베이스 라이브러리를 로드합니다.
$autoload['libraries'] = array('database');
이리,
- 위 코드는 애플리케이션이 시작될 때 데이터베이스 라이브러리를 로드합니다.
CodeIgniter 활성 레코드 삽입
테스트 목적으로 활성 레코드를 통해 애플리케이션과 상호 작용하는 데 사용할 컨트롤러와 정의된 경로를 생성합니다.
새 파일 application/controllers/ActiveRecordController.php를 생성합니다.
ActiveRecordController.php에 다음 코드를 추가합니다.
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class ActiveRecordController extends CI_Controller { public function store_order(){ $data = [ 'date' => '2018-12-19', 'customer_name' => 'Joe Thomas', 'customer_address' => 'US' ]; $this->db->insert('orders', $data); echo 'order has successfully been created'; } }
이리,
- $data = […] 데이터베이스 테이블 이름을 배열 키로 사용하고 값을 할당하는 배열 변수 데이터를 정의합니다.
- $this->db->insert('주문', $data); 데이터베이스 라이브러리의 삽입 메소드를 호출하고 테이블 이름 순서와 배열 변수 $data를 매개변수로 전달합니다. 이 줄은 배열 키를 필드 이름으로 사용하고 배열 값을 데이터베이스에 삽입할 값으로 사용하여 SQL INSERT 문을 생성합니다.
이제 활성 레코드에 대한 컨트롤러 메서드를 성공적으로 생성했으므로 이제 컨트롤러 메서드를 실행하기 위해 호출할 경로를 생성해야 합니다.
이제 application/config/routes.php에서 Routes.php를 엽니다.
다음 줄을 경로에 추가하세요
$route['ar/insert'] = 'activerecordcontroller/store_order';
이리,
- ActiveRecordController의 store_order를 호출하는 ar/insert 경로를 정의합니다.
이제 우리의 방법을 테스트하기 위해 웹 서버를 시작하겠습니다.
PHP용 내장 서버를 시작하려면 다음 명령을 실행하세요.
cd C:\Sites\ci-app php -S localhost:3000
이리,
- 위의 명령 브라우저를 명령줄로 이동하고 포트 3000에서 내장 서버를 시작합니다.
다음 URL을 브라우저에 로드하세요.
http://localhost:3000/ar/insert
다음과 같은 결과가 나옵니다
order has successfully been created
열기 MySQL 튜토리얼 데이터베이스 및 주문 테이블 확인
아래 이미지와 같이 새로 생성된 행을 사용할 수 있습니다.
CodeIgniter 활성 레코드 선택
이 섹션에서는 데이터베이스에 있는 레코드를 읽고 웹 브라우저에 정렬되지 않은 목록으로 표시하는 방법을 살펴보겠습니다.
ActiveRecordController에 다음 메서드를 추가합니다.
public function index() { $query = $this->db->get('orders'); echo "<h3>Orders Listing</h3>"; echo "<ul>"; foreach ($query->result() as $row) { echo "<li>$row->customer_name</li>"; } echo "</ul>"; }
이리,
- $query = $this->db->get('주문'); 모든 필드를 선택하는 주문 테이블에 대해 선택 쿼리를 실행합니다.
- 에코 “ 주문 목록 "; 크기 4의 HTML 제목을 표시합니다.
- 에코 “ "; 순서가 지정되지 않은 HTML 목록의 시작 태그를 인쇄합니다.
- foreach ($query->result() as $row) {…}는 for 루프를 사용하여 데이터베이스에서 반환된 결과를 반복했습니다. 에코 “ $행->고객_이름 "; 데이터베이스에서 customer_name을 인쇄합니다.
다음 URL을 로드하기 전에 몇 가지 레코드를 데이터베이스에 로드할 수 있습니다.
이제 SELECT 쿼리에 대한 경로를 정의해 보겠습니다.
application/config/routes.php 테이블 열기
다음 경로를 추가하세요
$route['ar'] = 'activerecordcontroller';
이리,
- ar 경로는 ActiveRecordController 클래스의 index 메서드를 가리킵니다. 이것이 기본적으로 레코드를 삽입하는 경로에 대해 했던 것처럼 인덱스 방법을 지정하지 않은 이유입니다.
웹 서버가 이미 실행 중이라고 가정하고 다음 URL을 로드합니다.
http://localhost:3000/ar
귀하의 웹 브라우저에서 다음과 매우 유사한 결과를 볼 수 있어야 합니다.
CodeIgniter 업데이트 활성 레코드
이 섹션에서는 활성 레코드를 사용하여 데이터베이스를 업데이트하는 방법에 대해 설명합니다. 고객 이름 Joe Thomas를 Joe로 업데이트한다고 가정해 보겠습니다.
ActiveRecordController 클래스에 다음 메서드를 추가합니다.
public function update_order() { $data = [ 'customer_name' => 'Joe', ]; $this->db->where('id', 1); $this->db->update('orders', $data); echo 'order has successfully been updated'; }
이리,
- $data = […] 데이터베이스 테이블에서 업데이트하려는 필드와 값을 정의합니다.
- $this->db->where('id', 1); 업데이트 쿼리의 where 절을 설정합니다.
- $this->db->update('주문', $data); SQL 업데이트 쿼리를 생성하고 데이터베이스에 대해 실행합니다.
위 코드는 다음 SQL 문을 생성합니다.
UPDATE orders SET customer_name = 'Joe' WHERE id = 1;
이제 Routes.php application/config/routes.php를 업데이트해 보겠습니다.
다음 경로를 추가하세요
$route['ar/update'] = 'activerecordcontroller/update_order';
변경 사항을 저장하십시오
웹 브라우저에 다음 URL을 로드하세요
이제 데이터베이스 레코드를 표시하고 변경 사항이 영향을 받았는지 살펴보겠습니다.
위의 이미지에서 볼 수 있듯이 첫 번째 레코드가 Joe Thomas에서 Joe로 업데이트되었습니다.
CodeIgniter 활성 레코드 삭제
이제 데이터베이스에서 레코드를 삭제하겠습니다. ID가 3인 레코드를 삭제하겠습니다.
ActiveRecordController에 다음 메서드를 추가합니다.
public function delete_order() { $this->db->where('id', 3); $this->db->delete('orders'); echo 'order has successfully been deleted'; }
이리,
- $this->db->where('id', 1); where 절을 설정합니다
- $this->db->delete('주문'); where 절을 사용하여 설정된 기준에 따라 주문 테이블의 데이터베이스 행을 삭제합니다.
위 코드를 실행하려면 웹 브라우저에 다음 URL을 로드하세요.
http://localhost:3000/ar/delete
요약
이 튜토리얼에서는 활성 레코드를 사용하여 데이터베이스에서 레코드를 삽입, 업데이트, 삭제 및 선택하는 방법을 배웠습니다. 우리는 정적 값을 사용하여 레코드를 생성하고 업데이트하고 삭제했습니다. 다음 튜토리얼에서는 사용자가 데이터베이스에서 동적으로 레코드를 생성하는 데 사용할 수 있는 사용자 인터페이스를 생성하겠습니다.