CodeIgniter データベース: データの構成、編集、更新、削除

コードイグナイター データベース

前のチュートリアルでは、CodeIgniter アクティブ レコードの基本と、データベースからレコードを挿入、更新、削除、読み取りする方法について説明しました。 このチュートリアルでは、データベース モデルを作成し、フォームを使用してデータベース レコードを作成および更新します。 CodeIgniter でデータベースを操作するのがまったく初めての場合は、前のチュートリアルを読むことをお勧めします。

Codeigniter データベース構成

まず、チュートリアル プロジェクト データベースを作成します。連絡先の詳細を管理するための簡単なデータベースを作成します。pals と彼らが住んでいる都市の 2 つのテーブルを持つ簡単なデータベースを作成します。pals と city の関係は XNUMX 対 XNUMX で、cities の id が主キー、pals テーブルの city_id が外部キーです。

次のスクリプトを実行してデータベースを作成します。

CREATE TABLE `pals` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `city_id` int(11) DEFAULT NULL,
  `contact_name` varchar(245) DEFAULT NULL,
  `contact_number` varchar(245) DEFAULT NULL,
  `email_address` varchar(245) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

次に、都市テーブルを作成しましょう

CREATE TABLE `cities` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(245) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ;

CodeIgniter データベース モデル

次に、データベースのモデルを作成します。 モデルはM部分です。 MVC。 このモデルは、データ アクセス、データ操作、ビジネス ロジックを扱います。

CodeIgniter では、各モデルがサポートするメソッドを定義する必要があります。 各モデルで同じコードを繰り返す代わりに、オブジェクト指向プログラミングの継承を利用して、モデルでサポートする基本メソッドを定義する親モデル クラスを作成します。

以下の表は、定義するメソッドとデータへのアクセス方法を示しています。

S / N 方法 Description
1 __構築する 親コンストラクター メソッドを呼び出すコンストラクター メソッドを定義します
2 すべて取得 データベースからすべてのフィールドとレコードを条件なしで取得します。
3 idによる取得 id という名前の INT 型の主キーを使用して、データベースから XNUMX つの行を取得します。
4 どこで入手 基準に基づいてデータベースからすべてのフィールドを取得します
5 insert 新しいレコードをデータベースに挿入します
6 update id という名前の INT 型の主キーに基づいて既存のデータベース レコードを更新します
7 削除 id という名前の INT タイプの主キーに基づいてデータベースから既存のレコードを削除します。

次の画像は、クラス図と、Pals および Cities 子モデルが親モデル BaseModel とどのように関連しているかを示しています。

CodeIgniter データベース モデル

上の画像で説明されているように XNUMX つのモデルを作成します

application/models/BaseModel.php に新しいクラス BaseModel を作成します。

次のコードを追加します

<?php

class BaseModel extends CI_Model {

    protected $table = '';

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

    public function get_all() {
        return $this->db->get($this->table)
                        ->result();
    }

    public function get_by_id($id) {
        return $this->db->get_where($this->table, array('id' => $id))
                        ->row();
    }

    public function get_where($where) {
        return $this->db->where($where)
                        ->get($this->table)
                        ->result();
    }

    public function insert($data) {
        return $this->db->insert($this->table, $data);
    }

    public function update($id, $data) {
        $this->db->where('id', $id);
        $this->db->update($this->table, $data);
    }

    public function delete($id) {
        $this->db->where('id', $id);
        $this->db->delete($this->table);
    }
}

ここに、

  • 保護された $table = ”; table という名前の保護された変数を定義します。 これは、基本モデル クラスのメソッドがどのテーブルと対話するかを指定するために、それぞれの子クラスによって設定されます。
  • public function __construct() {…} はコンストラクター メソッドを定義し、親クラス CI_Model のコンストラクター メソッドを実行します。
  • get_all() {…} は、データベース ライブラリと変数 $table の値を使用して、データベースに対して SELECT クエリを実行します。
  • get_by_id($id) {…} は、データベースから XNUMX つの行を取得するメソッドを定義し、INT データ型である必要があるパラメーター $id を受け入れます。
  • get_where($where) {…} は、where 句を設定できる get メソッドを定義します。
  • insert($data) {…} は挿入メソッドを定義し、データベースに書き込まれる値を含む配列パラメータ $data を受け入れます。
  • update($id, $data) {…} は更新メソッドを定義し、データベース内で更新される値を含む配列パラメータ $data を受け入れます。
  • delete($id) {…} は、データ型が INT である必要がある $id のパラメータを受け入れる削除メソッドを定義します。

親モデルクラスの作成が完了したので、Pals モデルを作成しましょう

application/models/Pals.php に新しいファイルを作成します

次のコードを追加します

<?php

class Pals_model extends BaseModel {

    protected $table = 'pals';

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

    public function get_by_id($id) {
        $this->db->where('pals.id', $id);
        $this->db->select('pals.*,cities.name');
        $this->db->from('pals');
        $this->db->join('cities', 'pals.city_id = cities.id');
        $query = $this->db->get();
        return $query->row();
    }

    public function get_all() {
        $this->db->select('pals.*,cities.name');
        $this->db->from('pals');
        $this->db->join('cities', 'pals.city_id = cities.id');
        $query = $this->db->get();
        return $query->result();
    }
}

ここに、

  • class Pals extends BaseModel {…} 親モデル BaseModel を拡張し、BaseModel で定義されているすべてのメソッドが子クラスに自動的にアクセスされるようにします。
  • protected $table = '仲間'; 親モデルに関連付けられたテーブル名を定義します
  • __construct() {…} 親コンストラクターを初期化します
  • public function get_by_id($id) {…} は get_by_id をオーバーライドして、Pals モデルに固有のカスタム実装を提供します。 get_by_id のクエリは結合を使用して都市テーブルから都市名を取得します。
  • public function get_all() {…} get_all メソッドをオーバーライドして、pals と city テーブルの間の結合クエリを実装します。

application/models/Cities.php に新しいファイルを作成します。

<?php
class Cities extends BaseModel {
    protected $table = 'cities';
    
    public function __construct() {
        parent::__construct();
    }
}

ここに、

$table = '都市'; モデルデータベーステーブルを定義します。

上記のコードからわかるように、継承により、CodeIgniter でモデルを操作する際に時間を大幅に節約できます。 次のセクションでは、次のことを学習します。

連絡先マネージャーコントローラー

モデルを作成したので、アプリケーションのコントローラーを作成しましょう。 Contacts と Cities という XNUMX つのコントローラーがあります。

都市から始めましょう

application/controllers ディレクトリに新しいファイル Cities.php を作成します

次のコードを追加します

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class Cities extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->helper('url', 'form');
        $this->load->library('form_validation');
        $this->load->model('cities_model');
    }

    public function index() {
        $header['title'] = 'Cities Listing';
        $data['pals'] = $this->cities_model->get_all();

        $this->load->view('header',$header);
        $this->load->view('cities/index', $data);
        $this->load->view('footer');
    }

    public function create() {
        $header['title'] = 'Create City';
        
        $this->load->view('header',$header);
        $this->load->view('cities/create');
        $this->load->view('footer');
    }

    public function store() {
        $rules = array(
            array(
                'field' => 'name',
                'label' => 'City Name',
                'rules' => 'required'
            )
        );

        $this->form_validation->set_rules($rules);

        if ($this->form_validation->run() == TRUE) {
            $data = array('name' => $this->input->post('name'));
            $this->cities_model->insert($data);

            redirect(base_url('cities'));
        } else {
            $header['title'] = 'Create City';
            
            $this->load->view('header',$header);
            $this->load->view('cities/create');
            $this->load->view('footer');
        }
    }

    public function edit($id) {
        $header['title'] = 'Edit City';
        $data['city'] = $this->cities_model->get_by_id($id);

        $this->load->view('header', $header);
        $this->load->view('cities/edit', $data);
        $this->load->view('footer');
    }

    public function update($id) {
        $rules = array(
            array(
                'field' => 'name',
                'label' => 'City Name',
                'rules' => 'required'
            )
        );

        $this->form_validation->set_rules($rules);

        if ($this->form_validation->run() == TRUE) {
            $data = array('name' => $this->input->post('name'));
            $this->cities_model->update($id,$data);

            redirect(base_url('cities'));
        } else {
            $header['title'] = 'Edit City';
            $data['city'] = $this->cities_model->get_by_id($id);
            
            $this->load->view('header',$header);
            $this->load->view('cities/create',$data);
            $this->load->view('footer');
        }
    }

    public function delete($id) {
        $header['title'] = 'Delete City';
        $data['city'] = $this->cities_model->get_by_id($id);

        $this->load->view('header', $header);
        $this->load->view('cities/delete', $data);
        $this->load->view('footer');
    }

    public function destroy($id) {
        $this->cities_model->delete($id);

        redirect(base_url('cities'));
    }
}

ここに、

上記のコードは、データベースから行を作成、更新、削除、読み取りするために必要なすべてのメソッドを実装しています。

application/controllers に別のファイル Contacts.php を作成します

次のコードを追加します

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class Contacts extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->helper('url', 'form');
        $this->load->library('form_validation');
        $this->load->model('pals_model');
    }

    public function index() {
        $header['title'] = 'Contacts List';
        $data['pals'] = $this->pals_model->get_all();

        $this->load->view('header', $header);
        $this->load->view('contacts/index', $data);
        $this->load->view('footer');
    }

    public function create() {
        $this->load->model('cities_model');
        $header['title'] = 'Create Contact';
        $data['cities'] = $this->cities_model->get_all();

        $this->load->view('header', $header);
        $this->load->view('contacts/create', $data);
        $this->load->view('footer');
    }

    public function store() {
        $rules = array(
            array(
                'field' => 'contact_name',
                'label' => 'Contact Name',
                'rules' => 'required'
            ),
            array(
                'field' => 'contact_number',
                'label' => 'Contact Number',
                'rules' => 'required',
                'errors' => array(
                    'required' => 'You must provide a %s.',
                ),
            ),
            array(
                'field' => 'email_address',
                'label' => 'Email Address',
                'rules' => 'required'
            ),
            array(
                'field' => 'city_id',
                'label' => 'City',
                'rules' => 'required'
            )
        );

        $this->form_validation->set_rules($rules);

        if ($this->form_validation->run() == FALSE) {
            $this->load->model('cities_model');
            $header['title'] = 'Create Contact';
            $data['cities'] = $this->cities_model->get_all();

            $this->load->view('header', $header);
            $this->load->view('contacts/create', $data);
            $this->load->view('footer');
        } else {
            $data = array(
                'city_id' => $this->input->post('city_id'),
                'contact_name' => $this->input->post('contact_name'),
                'contact_number' => $this->input->post('contact_number'),
                'email_address' => $this->input->post('email_address'),
            );

            $this->pals_model->insert($data);

            redirect(base_url('contacts'));
        }
    }

    public function edit($id) {
        $this->load->model('cities_model');
        $header['title'] = 'Edit Contact';
        $data['cities'] = $this->cities_model->get_all();

        $data['pal'] = $this->pals_model->get_by_id($id);
 
        $this->load->view('header', $header);
        $this->load->view('contacts/edit', $data);
        $this->load->view('footer');
    }

    public function update($id) {
        $rules = array(
            array(
                'field' => 'contact_name',
                'label' => 'Contact Name',
                'rules' => 'required'
            ),
            array(
                'field' => 'contact_number',
                'label' => 'Contact Number',
                'rules' => 'required',
                'errors' => array(
                    'required' => 'You must provide a %s.',
                ),
            ),
            array(
                'field' => 'email_address',
                'label' => 'Email Address',
                'rules' => 'required'
            ),
            array(
                'field' => 'city_id',
                'label' => 'City',
                'rules' => 'required'
            )
        );

        $this->form_validation->set_rules($rules);

        if ($this->form_validation->run() == FALSE) {
            $this->load->model('cities_model');
            $header['title'] = 'Create Contact';
            $data['cities'] = $this->cities_model->get_all();

            $data['pal'] = $this->pals_model->get_by_id($id);

            $this->load->view('header', $header);
            $this->load->view('contacts/edit', $data);
            $this->load->view('footer');
        } else {
            $data = array(
                'city_id' => $this->input->post('city_id'),
                'contact_name' => $this->input->post('contact_name'),
                'contact_number' => $this->input->post('contact_number'),
                'email_address' => $this->input->post('email_address'),
            );

            $this->pals_model->update($id, $data);

            redirect(base_url('contacts'));
        }
    }

    public function delete($id) {
        $this->load->model('cities_model');
        $header['title'] = 'Delete Contact';
        $data['cities'] = $this->cities_model->get_all();

        $data['pal'] = $this->pals_model->get_by_id($id);

        $this->load->view('header',$header);
        $this->load->view('contacts/delete',$data);
        $this->load->view('footer');
    }
    
    public function destroy($id){
        $this->pals_model->delete($id);
        
        redirect(base_url('contacts'));
    }
}

連絡先マネージャーのビュー

前のチュートリアルで CodeIgniter のフォームと検証についてはすでに説明しました。 前のチュートリアルで開発したコードを使用します。 完全を期すために、前のチュートリアルで作成したコードを再現します。

私たちのアプリケーションのビューは次のようになります

連絡先マネージャーのビュー

以下のリンクをクリックすると、上記のビューのコードをダウンロードできます。

CodeIgniter 連絡先マネージャー ビューのダウンロード

まとめ

このチュートリアルでは、モデルを作成する方法を学習します。 CodeIgniterオブジェクト指向プログラミングの継承を利用して、挿入、読み取り、更新、削除という 4 つの主要なデータベース操作を実装する基本モデルを作成し、コードの再利用性を促進しました。

実用的なアプリケーションを使用して概念を説明しましたが、次のチュートリアルでは、アプリケーションにさらに多くの機能を追加して、引き続き説明していきます。