Active Record (読込み処理) Part 1
一般的にデータベースのデータ操作を行うには「SQLクエリ」をデータベースに発行します。
データベースに記録されているデータを読込む(参照する)には、主に、SQLの「SELECT文」が利用されます。
しかし、Active Recordを利用すれば、直接SQLクエリを記述することなくデータベース操作を
オブジェクト指向に則る方法で行うことが可能になります。
また、Active Recordを利用することでSQLクエリに利用する各指示詞などの文字列が自動で適切にエスケープされるため 簡単に安全なプログラムコードとなる利点もあります。
基本形
もっともよく利用する基本的なデータ参照の方法を解説します。
select($select = '*', $escape = NULL)
データベースインスタンスの「select()」メソッドは、データベースのテーブルから参照(取得)したい
フィールド名、または、「SELECT句」に指定する文字列を指定します。フィールド名を配列にして指定することもできます。
第一引数で指定したフィールド名をエスケープする必要がない場合は、第二引数に「FALSE」を指定します。デフォルトではエスケープされるため、エスケープ処理を行う場合は第二引数の指定は必要ありません。
- フィールド名の指定
- 関数などの指定
- デフォルト
'id',
'first_name',
'family_name',
'age',
);
$this->db->select($select);
上記のコードが実行されるとデータベースオブジェクトに、下記のSQLクエリの一部がキャッシュされます。
上記のコードが実行されるとデータベースオブジェクトに、下記のSQLクエリの一部がキャッシュされます。
select()メソッドを実行しなかった場合は、デフォルトで下記のSQLクエリが利用されます。
from($from)
データベースインスタンスの「from()」メソッドは、操作したいテーブルのテーブル名を指定します。
「SELECT文」で指定するテーブルだけでなく「UPDATE文」や「INSERT文」などのSQLクエリに指定する テーブル名としても利用することができます。
上記のコードが実行されるとデータベースオブジェクトに、SQLクエリに指定されるテーブル名が
キャッシュされます。
where($key, $value = NULL, $escape = TRUE) 一番上に戻る
データベースインスタンスの「where()」メソッドは、SELECT文や、UPDATE文で利用する条件句の指定を行います。
第一引数には、フィールド名を指定します。第二引数には値を指定します。
第三引数に「FALSE」を指定すると、フィールド名と値はエスケープされません。
「where()」メソッドは実行されるたびに、条件句を「AND」で結んでいきます。
$this->db->where('family_name', '鈴木');
上記のコードが実行されるとデータベースオブジェクトに、下記のSQLクエリの一部がキャッシュされます。
第一引数にフィールド名を指定して、第二引数を指定しなかった場合は、 「`フィールド名` IS NULL」としてSQLクエリが生成されます。
上記のコードが実行されるとデータベースオブジェクトに、下記のSQLクエリの一部がキャッシュされます。
「IS NOT NULL」の条件句を利用したい場合は、下記のように指定します。
上記のコードが実行されるとデータベースオブジェクトに、下記のSQLクエリの一部がキャッシュされます。
複数の条件を一度の「where()」メソッドで指定することも可能です。
複数の条件を一度に指定するには、連想配列を引数に指定します。
'first_name' => '一郎',
'last_name' => '鈴木',
'age' => NULL,
);
$this->db->where($where);
上記のコードが実行されるとデータベースオブジェクトに、下記のSQLクエリの一部がキャッシュされます。
演算子を利用した条件を指定するには、フィールド名を指定する箇所に併せて演算子も記述します。
- MySQL
- PostgreSQL
または、連想配列で
'age <' => 20,
);
$this->db->where($where);
上記のコードが実行されるとデータベースオブジェクトに、下記のSQLクエリの一部がキャッシュされます。
get($table = '', $limit = null, $offset = null) 一番上に戻る
データベースインスタンスの「get()」メソッドは、SQLクエリのSELECT文を発行してデータベースから
取得したデータを結果オブジェクトとして生成して返します。
第一引数には、テーブル名を指定することができますが、事前に「from()」メソッドで指定している場合は不要です。
テーブル名は「from()」メソッドで指定せずに、「get()」メソッド実行時に指定することもできます。
get()メソッドが実行されるとデータベースオブジェクトにキャッシュされているSQLクエリ情報を基に
SQL文を生成して発行します。
select()メソッドや、where()メソッドなどが予め実行されていない場合は下記のSQLクエリが生成され発行されます。
$this->db->from('user_tbl');
$this->db->where('first_name', '一郎');
$query = $this->db->get();
上記のコードが実行されると下記のSQL文を生成して発行します。
第二引数と第三引数には、結果データの行数を限定するための「LIMIT句」を付加するための情報を指定することができます。
第二引数には、取得するデータ行の最大行数を指定します。
第三引数には、取得するデータのオフセット行数、つまり、開始行を指定します。先頭行は「0」となります。 デフォルトは「0」です。
select()メソッドや、where()メソッドなどが予め実行されていない場合は下記のSQLクエリが生成され発行されます。
get_where($table = '', $where = null, $limit = null, $offset = null) 一番上に戻る
条件「WHERE句」の情報を連想配列にして、第二引数に指定することができます。
その他の機能は、「get()」メソッドと同様です。
'first_name' => '一郎',
'last_name' => '鈴木',
'age' => NULL,
);
$query = $this->db->get_where('user_tbl', $where);
上記のコードが実行されると、下記のSQLクエリが発行されます。
FROM `user_tbl`
WHERE `first_name` = '一郎' AND `last_name` = '鈴木' AND `age` IS NULL