Codeigniter アクティブ レコード: 挿入、選択、更新、削除

データはほとんどのアプリケーションの血統です。 データは、さらに分析して洞察を提供し、ビジネス上の意思決定を促進できるような方法で保存する必要があります。 通常、データはデータベースに保存されます。 データベースを操作する際の主な懸念事項は、セキュリティ、アクセスの容易さ、およびデータベース ベンダー固有の構造化照会言語 (SQL) の実装です。

アクティブ レコードは、簡単、安全、雄弁な方法でデータベースとの対話を容易にする設計パターンです。

アクティブレコードには次のような利点があります

  • アクティブなレコードの単純なメソッドチェーンを使用してレコードを挿入、更新、削除します
  • パラメータを使用して安全な方法でユーザー入力を送信します
  • 次のような複数のデータベース エンジンを操作できます。 MySQL、SQL Server など、アプリケーション コードを書き換えることなく使用できます。
  • CodeIgniter は、各データベース エンジンに固有のドライバーをバックグラウンドで使用します。

アクティブレコードの使用方法: 例

このチュートリアルでは、チュートリアル データベースについて説明します。2 つのテーブルがあり、1 つは注文用、もう 1 つは詳細用です。

このチュートリアルでは、次のことを前提としています。 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 という 2 つのテーブルを作成します。2 つのテーブル間の関係は、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 = […] データベーステーブル名を配列キーとして使用し、それらに値を割り当てる配列変数 data を定義します。
  • $this->db->insert('orders', $data); データベース ライブラリの挿入メソッドを呼び出し、テーブル名の順序と配列変数 $data をパラメータとして渡します。 この行は、配列キーをフィールド名として使用し、配列値をデータベースに挿入する値として使用する SQL INSERT ステートメントを生成します。

アクティブ レコードのコントローラー メソッドの作成に成功したので、コントローラー メソッドを実行するために呼び出すルートを作成する必要があります。

次に、application/config/routes.php の Routes.php を開きます。

ルートに次の行を追加します

$route['ar/insert'] = 'activerecordcontroller/store_order';

ここに、

  • ActiveRecordController の store_order を呼び出すルート ar/insert を定義します。

Web サーバーを起動してメソッドをテストしましょう。

次のコマンドを実行して、PHPの組み込みサーバーを起動します。

cd C:\Sites\ci-app
php -S localhost:3000

ここに、

  • 上記のコマンド ブラウザをコマンド ラインに入力し、ポート 3000 で組み込みサーバーを起動します。

次のURLをブラウザに読み込みます

http://localhost:3000/ar/insert

次のような結果が得られます

order has successfully been created

Video Cloud Studioで MySQL チュートリアルデータベースと注文テーブルを確認してください

以下の画像に示すように、新規に行を作成できます。

CodeIgniter アクティブ レコードの挿入

CodeIgniter アクティブ レコードの選択

このセクションでは、データベースにあるレコードを読み取り、Web ブラウザーに順序なしリストとして表示する方法を説明します。

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('orders'); 注文テーブルに対して選択クエリを実行し、すべてのフィールドを選択します
  • エコー " 注文リスト”; サイズ 4 の HTML 見出しを表示します
  • エコー " ”; 順序付けされていない HTML リストの開始タグを出力します。
  • foreach ($query->result() as $row) {…} は、for ループを使用して、データベースから返された結果をループします。 エコー " $row->customer_name ”; データベースから customer_name を出力します

次の URL をロードする前に、データベースにさらにいくつかのレコードをロードできます。

SELECT クエリのルートを定義しましょう

application/config/routes.php テーブルを開く

次のルートを追加します

$route['ar'] = 'activerecordcontroller';

ここに、

  • ルート ar は、ActiveRecordController クラスのインデックス メソッドを指します。 これはデフォルトです。そのため、レコードを挿入するルートの場合のようにインデックス メソッドを指定しませんでした。

ウェブサーバーがすでに実行されていると仮定して、次のURLを読み込みます。

http://localhost:3000/ar

ウェブブラウザで次のような結果が表示されるはずです。

CodeIgniter アクティブ レコードの選択

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('orders', $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を読み込みます

CodeIgniter アクティブ レコードを更新

次に、データベース レコードを表示して、変更が影響を受けたかどうかを確認してみましょう。

CodeIgniter アクティブ レコードを更新

上の画像からわかるように、最初のレコードが 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('orders'); where 句を使用して設定された基準に基づいて、orders テーブルのデータベース行を削除します。

上記のコードを実行するには、Webブラウザで次のURLを読み込みます。

http://localhost:3000/ar/delete

製品概要

このチュートリアルでは、アクティブなレコードを操作して、データベースからレコードを挿入、更新、削除、選択する方法を学習しました。 静的な値を使用してレコードの作成、更新、削除を行いました。 次のチュートリアルでは、ユーザーがデータベース内にレコードを動的に作成するために使用できるユーザー インターフェイスを作成します。