このエントリーをはてなブックマークに追加

更新日: 2016年2月25日

実行時間: 0.0234

Active Record (書込み処理)

 CodeIgniterのActiveRecordを利用した、データベースへのデータの追加や更新、削除といった
書き込み処理を行う方法を解説していきます。

データ準備

set($key, $value = '', $escape = TRUE)

 「INSERT INTO」文、「REPLACE INTO」文、または、「UPDATE」文で、追加、または、更新するデータの指定を行います。

 データは、第一引数に「フィールド名」、第二引数に「値」を一つづつ指定する方法と、 連想配列、または、オブジェクトによる複数のデータをまとめて指定する方法があります。

    • 一つづつ指定
    $this->db->set('first_name', '一郎');
    $this->db->set('family_name', '鈴木');
    $this->db->insert('any_table');
    INSERT INTO `any_table` (`first_name`, `family_name`) VALUES ('一郎', '鈴木')
    • 連想配列で指定
    $data = array(
        'first_name' => '一郎',
        'family_name' => '鈴木',
    );
    $this->db->set($data);
    $this->db->update('any_table');
    UPDATE `any_table` SET `first_name` = '一郎', `family_name` = '鈴木'
    • オブジェクトで指定
    // models/some_data.php
    class Some_data extendsCI_Model {
        public $first_name = '一郎';
        public $family_name = '鈴木';
    }
    
    $this->load->mode('some_data');
    $this->db->set($this->some_data);
    $this->db->insert('any_table');
    INSERT INTO `any_table` (`first_name`, `family_name`) VALUES ('一郎', '鈴木')

データ追加

insert($table = '', $set = NULL)

 「INSERT INTO」文を生成して実行します。

 第一引数にテーブル名を指定します。

 第二引数には、連想配列、または、オブジェクトデータを指定できます。
「set()」メソッドと「insert()」メソッドの両方でデータを指定した場合は、両方のデータが利用されますが、フィールド名が重複した場合は、「insert()」メソッドでの値が優先されます。

    $this->db->set('first_name', '一郎');
    $data = array(
        'first_name' => 'サブロー',
        'family_name' => '鈴木',
    );
    $this->db->insert('any_table', $data);
    INSERT INTO `any_table` (`first_name`, `family_name`) VALUES ('サブロー', '鈴木')

insert_batch($table = '', $set = NULL) 一番上に戻る

 複数レコードを挿入する「INSERT INTO」文を生成して実行します。

 第一引数には、テーブル名を指定します。

 第二引数には、一つ以上の連想配列、または、オブジェクトデータの要素を持つ配列を指定することができます。

    $data = array(
        array(
            'first_name' => '一郎',
            'family_name' => '鈴木',
        ),
        array(
            'first_name' => '太郎',
            'family_name' => '山田',
        ),
    );
    $this->db->insert_batch('any_table', $data);
                            
    INSERT INTO `any_table` (`first_name`, `family_name`)
    VALUES ('一郎', '鈴木'), ('太郎', '山田')

replace($table = '', $set = NULL) 一番上に戻る

 「REPLACE INTO」文を生成して実行します。

 引数の指定方法は、「insert()」メソッドと同様です。

    $data = array(
        'member_id' => 33333,
        'first_name' => 'サブロー',
        'family_name' => '鈴木',
    );
    $this->db->replace('any_table', $data);
    REPLACE INTO (`member_id`, `first_name`, `family_name`)
    VALUES (33333, 'サブロー', '鈴木')

データ更新

update($table = '', $set = NULL, $where = NULL, $limit = NULL) 一番上に戻る

 「UPDATE」文を生成して実行します。

 第一引数には、テーブル名を指定します。

 第二引数は、更新するデータを連想配列で指定することができます。
事前に「set()」メソッドで指定しておくことも可能です。

 第三引数は、更新条件(WHERE)を連想配列で指定することができます。
事前に「where()」メソッドで指定しておくことも可能です。

 第四引数は、更新行数の最大値を指定することができます。
事前に「limit()」メソッドで指定しておくことも可能です。

    $data = array(
        'first_name' => '次郎' );
    $where = array(
        'member_id' => 120
    );
    $this->db->update('any_table', $data, $where);
    $this->db->set('first_name', '次郎');
    $this->db->where('member_id', 120);
    $this->db->update('any_table');
    UPDATE `any_table` SET `first_name` = '次郎' WHERE `member_id` = 120

データ削除

delete($table = '', $where = '', $limit = NULL) 一番上に戻る

 「DELETE FROM」文を生成して実行します。

 第一引数には、テーブル名を指定します。

 第二引数は、削除条件(WHERE)を連想配列で指定することができます。
事前に「where()」メソッドで指定しておくことも可能です。

 第三引数は、削除行数の最大値を指定することができます。
事前に「limit()」メソッドで指定しておくことも可能です。

 第二引数での条件指定や、「where()」メソッドなどで条件が指定されていない場合は、 データの削除は行われずFALSEが返されます。
 全データを削除する場合は、「empty_table()」メソッドを利用します。

    $where = array(
        'member_id' => 120
    );
    $this->db->delete('any_table', $where);
    DELETE FROM `any_table` WHERE `member_id` = 120

 同じ削除条件であれば、第一引数にテーブル名の配列を指定することで、 複数のテーブルからデータを削除することも可能です。

    $where = array(
        'member_id' => 120
    );
    $tables = array(
        'table_one',
        'table_two',
        'table_three',
    );
    $this->db->delete($tables, $where);
    DELETE FROM `table_one` WHERE `member_id` = 120
    DELETE FROM `table_two` WHERE `member_id` = 120
    DELETE FROM `table_three` WHERE `member_id` = 120

empty_table($table = '') 一番上に戻る

 引数で指定したテーブルの全データを削除します。

    $this->db->delete('any_table');
    DELETE FROM `any_table`

truncate($table = '') 一番上に戻る

 「TRUNCATE」文による全データの削除を行います。
「empty_table()」メソッドより高速ですが、トランザクションが利かないためロールバックができないことに注意してください。

 「TRUNCATE」文が用意されていないDBエンジンでは、「DELETE」文が実行されます。

    $this->db->truncate('any_table');
    TRUNCATE `any_table`