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

更新日: 2016年2月25日

実行時間: 0.0075

Active Record (読込み処理) Part 1

 一般的にデータベースのデータ操作を行うには「SQLクエリ」をデータベースに発行します。

 データベースに記録されているデータを読込む(参照する)には、主に、SQLの「SELECT文」が利用されます。

 しかし、Active Recordを利用すれば、直接SQLクエリを記述することなくデータベース操作を
オブジェクト指向に則る方法で行うことが可能になります。

 また、Active Recordを利用することでSQLクエリに利用する各指示詞などの文字列が自動で適切にエスケープされるため 簡単に安全なプログラムコードとなる利点もあります。

基本形

 もっともよく利用する基本的なデータ参照の方法を解説します。

select($select = '*', $escape = NULL)

 データベースインスタンスの「select()」メソッドは、データベースのテーブルから参照(取得)したい
フィールド名、または、「SELECT句」に指定する文字列を指定します。フィールド名を配列にして指定することもできます。

 第一引数で指定したフィールド名をエスケープする必要がない場合は、第二引数に「FALSE」を指定します。デフォルトではエスケープされるため、エスケープ処理を行う場合は第二引数の指定は必要ありません。

  • フィールド名の指定
  • $this->db->select('id, first_name, family_name, age');
    または、
    $select = array(
        'id',
        'first_name',
        'family_name',
        'age',
    );
    $this->db->select($select);

    上記のコードが実行されるとデータベースオブジェクトに、下記のSQLクエリの一部がキャッシュされます。

    SELECT `id, first_name, family_name, age`

  • 関数などの指定
  • $this->db->select('count(id)');

    上記のコードが実行されるとデータベースオブジェクトに、下記のSQLクエリの一部がキャッシュされます。

    SELECT count(id)

  • デフォルト
  • select()メソッドを実行しなかった場合は、デフォルトで下記のSQLクエリが利用されます。

    SELECT *

from($from)

 データベースインスタンスの「from()」メソッドは、操作したいテーブルのテーブル名を指定します。

 「SELECT文」で指定するテーブルだけでなく「UPDATE文」や「INSERT文」などのSQLクエリに指定する テーブル名としても利用することができます。

    $this->db->from('user_tbl');

    上記のコードが実行されるとデータベースオブジェクトに、SQLクエリに指定されるテーブル名が
    キャッシュされます。


where($key, $value = NULL, $escape = TRUE) 一番上に戻る

 データベースインスタンスの「where()」メソッドは、SELECT文や、UPDATE文で利用する条件句の指定を行います。

 第一引数には、フィールド名を指定します。第二引数には値を指定します。

 第三引数に「FALSE」を指定すると、フィールド名と値はエスケープされません。

 「where()」メソッドは実行されるたびに、条件句を「AND」で結んでいきます。

    $this->db->where('first_name', '一郎');
    $this->db->where('family_name', '鈴木');

    上記のコードが実行されるとデータベースオブジェクトに、下記のSQLクエリの一部がキャッシュされます。

    `first_name` = '一郎' AND `family_name` = '鈴木'

 第一引数にフィールド名を指定して、第二引数を指定しなかった場合は、 「`フィールド名` IS NULL」としてSQLクエリが生成されます。

    $this->db->where('age');

    上記のコードが実行されるとデータベースオブジェクトに、下記のSQLクエリの一部がキャッシュされます。

    `age` IS NULL

 「IS NOT NULL」の条件句を利用したい場合は、下記のように指定します。

    $this->db->where('age IS NOT NULL');

    上記のコードが実行されるとデータベースオブジェクトに、下記のSQLクエリの一部がキャッシュされます。

    `age` IS NOT NULL

 複数の条件を一度の「where()」メソッドで指定することも可能です。
 複数の条件を一度に指定するには、連想配列を引数に指定します。

    $where = array(
        'first_name' => '一郎',
        'last_name' => '鈴木',
        'age' => NULL,
    );
    $this->db->where($where);

    上記のコードが実行されるとデータベースオブジェクトに、下記のSQLクエリの一部がキャッシュされます。

    `first_name` = '一郎' AND `last_name` = '鈴木' AND `age` IS NULL

 演算子を利用した条件を指定するには、フィールド名を指定する箇所に併せて演算子も記述します。

    $this->db->where('age <', 20);

    または、連想配列で

    $where = array(
        'age <' => 20,
    );
    $this->db->where($where);

    上記のコードが実行されるとデータベースオブジェクトに、下記のSQLクエリの一部がキャッシュされます。

    `age` < 20

get($table = '', $limit = null, $offset = null) 一番上に戻る

 データベースインスタンスの「get()」メソッドは、SQLクエリのSELECT文を発行してデータベースから
取得したデータを結果オブジェクトとして生成して返します。

 第一引数には、テーブル名を指定することができますが、事前に「from()」メソッドで指定している場合は不要です。
 テーブル名は「from()」メソッドで指定せずに、「get()」メソッド実行時に指定することもできます。

 get()メソッドが実行されるとデータベースオブジェクトにキャッシュされているSQLクエリ情報を基に
SQL文を生成して発行します。

    $query = $this->db->get('user_tbl');

    select()メソッドや、where()メソッドなどが予め実行されていない場合は下記のSQLクエリが生成され発行されます。

    SELECT * FROM `user_tbl`;

    $this->db->select('id, first_name, family_name, age');
    $this->db->from('user_tbl');
    $this->db->where('first_name', '一郎');
    $query = $this->db->get();

    上記のコードが実行されると下記のSQL文を生成して発行します。

    SELECT `id`, `first_name`, `family_name`, `age` FROM `user_tbl` WHERE `first_name` = '一郎';

 第二引数と第三引数には、結果データの行数を限定するための「LIMIT句」を付加するための情報を指定することができます。

 第二引数には、取得するデータ行の最大行数を指定します。

 第三引数には、取得するデータのオフセット行数、つまり、開始行を指定します。先頭行は「0」となります。 デフォルトは「0」です。

    $query = $this->db->get('user_tbl', 10, 30);

    select()メソッドや、where()メソッドなどが予め実行されていない場合は下記のSQLクエリが生成され発行されます。

    • MySQL
    SELECT * FROM `user_tbl` LIMIT 30, 10;
    • PostgreSQL
    SELECT * FROM `user_tbl` LIMIT 10 OFFSET 30;

get_where($table = '', $where = null, $limit = null, $offset = null) 一番上に戻る

 条件「WHERE句」の情報を連想配列にして、第二引数に指定することができます。
 その他の機能は、「get()」メソッドと同様です。

    $where = array(
        'first_name' => '一郎',
        'last_name' => '鈴木',
        'age' => NULL,
    );
    $query = $this->db->get_where('user_tbl', $where);

    上記のコードが実行されると、下記のSQLクエリが発行されます。

    SELECT *
    FROM `user_tbl`
    WHERE `first_name` = '一郎' AND `last_name` = '鈴木' AND `age` IS NULL