CodeIgniter ActiveRecord
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[CodeIgniter]]
CodeIgniterのActiveRecord ヘルパーメソッド早見表
#norelated
#contents
* ActiveRecord(アクティブ・レコード)とは? [#z044b128]
- [[ORM]] (オブジェクト・リレーショナル・マッピング) の一...
- データベースを操作するクラスを作り、そのクラスメソッド...
- 生のSQLを書かなくても、データベースを操作できる。
[[Active Record - Wikipedia>https://ja.wikipedia.org/wiki...
>Active Recordはデータベースからデータを読み出すためのア...
データベーステーブルあるいはビューの1行が1つのクラスにラ...
このクラスはデータベースアクセスのカプセル化も行う。
オブジェクトの生成後は、保存メソッドで新しい行がデータベ...
オブジェクトが更新されると、データベースの対応する行もま...
&color(red){ラッパークラスはテーブルあるいはビューの各カ...
一方でその性質上、複雑な設計のデータベースとは相性が悪い。
* CodeIgniterのActiveRecord [#u4e11379]
SQLを書いてデータベースを操作したい場合は、[[CodeIgniter ...
(参考)
-[[Active Record クラス : CodeIgniter ユーザガイド 日本語...
-[[Active Record | DB編 CodeIgniter Guide 徹底ガイド!>ht...
--[[Active Record (読込み) Part 1>http://www.ci-guide.inf...
--[[Active Record (読込み) Part 2>http://www.ci-guide.inf...
--[[Active Record (読込み) Part 3>http://www.ci-guide.inf...
--[[Active Record (書込み)>http://www.ci-guide.info/db/ar...
--[[Active Record ARプロパティキャッシュ>http://www.ci-gu...
---------------------------------------------------------...
* 読み込み Read [#jfda3f81]
** get() … SELECTを実行 [#j89239bf]
単独で使うとテーブルの全レコードを取得する。
$query = $this->db->get('mytable');
// SELECT * FROM mytable
limitとoffsetを指定できる。
$query = $this->db->get('mytable', 10, 20);
// SELECT * FROM mytable LIMIT 20, 10 (MySQLの場合)
** select() … カラムを指定 [#abf37533]
$this->db->select('title, content, date');
$query = $this->db->get('mytable');
// SELECT title, content, date FROM mytable
** select_max() … 最大値を取得 SELECT MAX(field) [#r07534...
$this->db->select_max('age');
$query = $this->db->get('members');
// SELECT MAX(age) as age FROM members
第2引数で、カラム名の指定もできる。
$this->db->select_max('age', 'member_age');
$query = $this->db->get('members');
// 次を生成: SELECT MAX(age) as member_age FROM members
** select_min() … 最小値を取得 SELECT MIN(field) [#b7c388...
select_max()と同様。
$this->db->select_min('age');
$query = $this->db->get('members');
// SELECT MIN(age) as age FROM members
** from() … テーブルを指定 [#q3bffecb]
$this->db->select('title, content, date');
$this->db->from('mytable');
$query = $this->db->get();
// SELECT title, content, date FROM mytable
テーブルの指定はget()メソッドの第1引数で指定することも可...
** where() … 条件句を指定 [#gb1c7ebc]
where()メソッドの引数
+ 第1引数 … カラム名
+ 第2引数 … (カラム名にバインドする=結び付ける)値
+ 第3引数 … エスケープの有無(FALSEを指定するとエスケープ...
$this->db->where('user', $name, FALSE);
条件句の組み立て方には、4つの方法がある。
*** 1. キー/値の組合せで指定 [#u3862c48]
$this->db->where('name', $name);
// WHERE name = 'Joe'
where()メソッドを複数回呼ぶと、ANDで連結される。
$this->db->where('name', $name);
$this->db->where('title', $title);
$this->db->where('status', $status);
// WHERE name = 'Joe' AND title = 'boss' AND status = 'a...
*** 2. 演算子を指定 [#bde49144]
- 第1引数に演算子を含めることができる。
- カラム名の後に演算子の記号を記述すればOK
$this->db->where('name !=', $name);
$this->db->where('id <', $id);
// WHERE name != 'Joe' AND id < 45
*** 3. 連想配列で一度に複数の条件を指定 [#y1de3ff4]
$array = array('name' => $name, 'title' => $title, 'stat...
$this->db->where($array);
// WHERE name = 'Joe' AND title = 'boss' AND status = 'a...
$array = array('name !=' => $name, 'id <' => $id, 'date ...
$this->db->where($array);
// WHERE name != 'Joe' AND id < 45 AND date > '1999-12-31'
*** 4. 自由に指定する [#e8eea370]
WHERE句の中身を生のSQLで指定することもできる。
$where = "name='Joe' AND status='boss' OR status='active...
$this->db->where($where);
// WHERE name='Joe' AND status='boss' OR status='active'
SQLを直に指定できるので、細かい条件があったら、この方法で...
** like() … LIKE句を生成 [#tbbcc404]
like()メソッドに渡されるすべての値は自動でエスケープされ...
$this->db->like('title', 'match');
// WHERE title LIKE '%match%'
- like()メソッドを複数回呼ぶと、ANDで連結される。
$this->db->like('title', 'match');
$this->db->like('body', 'match');
// WHERE title LIKE '%match%' AND body LIKE '%match%'
- ワイルドカード (%) が付加される場所を指定したい場合は、...
- 'before'、'after'、'both'(デフォルト値)が指定できる選...
$this->db->like('title', 'match', 'before');
// WHERE title LIKE '%match'
$this->db->like('title', 'match', 'after');
// WHERE title LIKE 'match%'
$this->db->like('title', 'match', 'both');
// WHERE title LIKE '%match%'
// $this->db->like('title', 'match'); と同じ動作
- 連想配列で一度に指定する方法
$array = array('title' => $match, 'page1' => $match, 'pa...
$this->db->like($array);
// WHERE title LIKE '%match%' AND page1 LIKE '%match%' A...
デバッグ時の手間を考えると、like()メソッドを複数回呼び出...
* 問合せ結果の処理 [#f7fcadd9]
** query() … クエリーの実行 [#g04c7150]
$sql = "SELECT * FROM mytable WHERE user = ?";
$param = array($user);
$query = $this->db->query($sql, $param);
** result_array() … クエリーの結果を配列で返す [#r6a142b1]
$this->db->select('title, name, date');
$this->db->from('mytable');
$query = $this->db->get();
// SELECT title, content, date FROM mytable
$result = $query->result_array();
foreach ($result as $row)
{
$title = $row['title'];
$name = $row['name'];
$date = $row['date'];
echo "title=".$title." / name=".$name." / date=".$date...
}
** num_rows() … クエリで返されたレコード数を取得 [#v33788...
$this->db->select('title, name, date');
$query = $this->db->get('mytable');
echo $query->num_rows();
// 3 のような整数が出力される(取得されたレコード数は3件...
** row_array() … クエリーの結果を1行だけ返す [#c1c16374]
$this->db->select('title, name, date');
$this->db->where('name', 'Joe');
$this->db->from('mytable');
$query = $this->db->get();
// SELECT title, name, date FROM mytable WHERE name = 'J...
if ($query->num_rows() > 0)
{
$row = $query->row_array();
echo $row['title'];
echo $row['name'];
echo $row['date'];
}
- 特定の行を返したいときは、第1引数に、行番号を数値とし...
$row = $query->row_array(5);
** first_row()、last_row()、next_row()、previous_row() … ...
- 結果を「進む」「もどる」「最初に移動」「最後に移動」し...
$row = $query->first_row('array')
$row = $query->last_row('array')
$row = $query->next_row('array')
$row = $query->previous_row('array')
引数に"array"と指定しなければ、デフォルトでは、これらのメ...
** count_all() … テーブルの全レコード数を取得 [#i7d5cab1]
echo $this->db->count_all('my_table');
// 25 のような整数が出力される(全レコード数は25件だった)
** count_all_results() … 条件を指定してレコード数を取得 [...
- 第1引数でテーブル名を指定できる。
- 条件を指定しない場合、count_all()メソッドと同様に、テー...
echo $this->db->count_all_results('my_table');
// 25 のような整数が出力される(全レコード数は25件だった)
- 条件を指定して、絞り込んだ件数を数えることができる。
$this->db->like('title', '重要');
$this->db->from('my_table');
echo $this->db->count_all_results();
// 17 のような整数が出力される。(条件に合うレコード数は...
* 書き込み Write [#a8a25066]
** insert() … データの挿入 [#tb5d6f7f]
$data['title'] = 'My title';
$data['name'] = 'My Name';
$data['date'] = 'My date';
$this->db->insert('mytable', $data);
// INSERT INTO mytable (title, name, date) VALUES ('My t...
** insert_id() … 挿入されたデータのID番号を取得 [#a14b35e3]
echo $this->db->insert_id();
// 25 のような整数が出力される(挿入されたレコードは25件...
** update() … データの更新 [#wf23c9ef]
update($table = '', $set = NULL, $where = NULL, $limit =...
+ 第1引数: テーブル名を指定
+ 第2引数: 更新するデータを連想配列で指定
→ set()メソッドで指定してもOK
+ 第3引数: 更新条件(WHERE句)を連想配列で指定
→ where()メソッドで指定してもOK
+ 第4引数: 更新行数の最大値を指定
→ limit()メソッドで指定してもOK
$table = 'mytable';
$data['title'] = $title;
$data['name'] = $name;
$data['date'] = $date;
$where['id'] = $id;
$this->db->update($table, $data, $where);
// UPDATE mytable
// SET title = '{$title}', name = '{$name}', date = '{$d...
// WHERE id = $id
** delete() … データの削除 [#c691729c]
+ 第1引数: テーブル名を指定
+ 第2引数: WHERE句を指定
→ where()メソッドで指定してもOK
$table = 'mytable';
$where['id'] = $id;
$this->db->delete($table, $where);
// DELETE FROM mytable
// WHERE id = $id
** affected_rows() … 処理されたレコード数を取得 [#s745637e]
書き込みタイプのクエリー (insert、updateなど) が実行され...
echo $this->db->affected_rows();
// 3 のような整数が出力される(処理されたレコード数は3件...
- MySQLでは、"DELETE FROM TABLE" を実行すると0行と返す。
** truncate() … テーブルの全データを削除 [#d485ce24]
$table = 'mytable';
$this->db->truncate($table);
// TRUNCATE mytable
* 後始末 [#rc530b0a]
** free_result() … メモリの解放 [#wc53dded]
- 結果に関連付けられたメモリを解放し、結果のリソースIDを...
- 通常、PHPは、スクリプトの実行を終えると、メモリを自動的...
- しかし、特定のスクリプトで多くのクエリを実行したとき、...
$query = $this->db->query('SELECT title FROM my_table');
foreach ($query->result() as $row)
{
echo $row->title;
}
$query->free_result(); // 結果オブジェクトの $query はも...
$query2 = $this->db->query('SELECT name FROM some_table');
$row = $query2->row();
echo $row->name;
$query2->free_result(); // 結果オブジェクトの $query2 は...
終了行:
[[CodeIgniter]]
CodeIgniterのActiveRecord ヘルパーメソッド早見表
#norelated
#contents
* ActiveRecord(アクティブ・レコード)とは? [#z044b128]
- [[ORM]] (オブジェクト・リレーショナル・マッピング) の一...
- データベースを操作するクラスを作り、そのクラスメソッド...
- 生のSQLを書かなくても、データベースを操作できる。
[[Active Record - Wikipedia>https://ja.wikipedia.org/wiki...
>Active Recordはデータベースからデータを読み出すためのア...
データベーステーブルあるいはビューの1行が1つのクラスにラ...
このクラスはデータベースアクセスのカプセル化も行う。
オブジェクトの生成後は、保存メソッドで新しい行がデータベ...
オブジェクトが更新されると、データベースの対応する行もま...
&color(red){ラッパークラスはテーブルあるいはビューの各カ...
一方でその性質上、複雑な設計のデータベースとは相性が悪い。
* CodeIgniterのActiveRecord [#u4e11379]
SQLを書いてデータベースを操作したい場合は、[[CodeIgniter ...
(参考)
-[[Active Record クラス : CodeIgniter ユーザガイド 日本語...
-[[Active Record | DB編 CodeIgniter Guide 徹底ガイド!>ht...
--[[Active Record (読込み) Part 1>http://www.ci-guide.inf...
--[[Active Record (読込み) Part 2>http://www.ci-guide.inf...
--[[Active Record (読込み) Part 3>http://www.ci-guide.inf...
--[[Active Record (書込み)>http://www.ci-guide.info/db/ar...
--[[Active Record ARプロパティキャッシュ>http://www.ci-gu...
---------------------------------------------------------...
* 読み込み Read [#jfda3f81]
** get() … SELECTを実行 [#j89239bf]
単独で使うとテーブルの全レコードを取得する。
$query = $this->db->get('mytable');
// SELECT * FROM mytable
limitとoffsetを指定できる。
$query = $this->db->get('mytable', 10, 20);
// SELECT * FROM mytable LIMIT 20, 10 (MySQLの場合)
** select() … カラムを指定 [#abf37533]
$this->db->select('title, content, date');
$query = $this->db->get('mytable');
// SELECT title, content, date FROM mytable
** select_max() … 最大値を取得 SELECT MAX(field) [#r07534...
$this->db->select_max('age');
$query = $this->db->get('members');
// SELECT MAX(age) as age FROM members
第2引数で、カラム名の指定もできる。
$this->db->select_max('age', 'member_age');
$query = $this->db->get('members');
// 次を生成: SELECT MAX(age) as member_age FROM members
** select_min() … 最小値を取得 SELECT MIN(field) [#b7c388...
select_max()と同様。
$this->db->select_min('age');
$query = $this->db->get('members');
// SELECT MIN(age) as age FROM members
** from() … テーブルを指定 [#q3bffecb]
$this->db->select('title, content, date');
$this->db->from('mytable');
$query = $this->db->get();
// SELECT title, content, date FROM mytable
テーブルの指定はget()メソッドの第1引数で指定することも可...
** where() … 条件句を指定 [#gb1c7ebc]
where()メソッドの引数
+ 第1引数 … カラム名
+ 第2引数 … (カラム名にバインドする=結び付ける)値
+ 第3引数 … エスケープの有無(FALSEを指定するとエスケープ...
$this->db->where('user', $name, FALSE);
条件句の組み立て方には、4つの方法がある。
*** 1. キー/値の組合せで指定 [#u3862c48]
$this->db->where('name', $name);
// WHERE name = 'Joe'
where()メソッドを複数回呼ぶと、ANDで連結される。
$this->db->where('name', $name);
$this->db->where('title', $title);
$this->db->where('status', $status);
// WHERE name = 'Joe' AND title = 'boss' AND status = 'a...
*** 2. 演算子を指定 [#bde49144]
- 第1引数に演算子を含めることができる。
- カラム名の後に演算子の記号を記述すればOK
$this->db->where('name !=', $name);
$this->db->where('id <', $id);
// WHERE name != 'Joe' AND id < 45
*** 3. 連想配列で一度に複数の条件を指定 [#y1de3ff4]
$array = array('name' => $name, 'title' => $title, 'stat...
$this->db->where($array);
// WHERE name = 'Joe' AND title = 'boss' AND status = 'a...
$array = array('name !=' => $name, 'id <' => $id, 'date ...
$this->db->where($array);
// WHERE name != 'Joe' AND id < 45 AND date > '1999-12-31'
*** 4. 自由に指定する [#e8eea370]
WHERE句の中身を生のSQLで指定することもできる。
$where = "name='Joe' AND status='boss' OR status='active...
$this->db->where($where);
// WHERE name='Joe' AND status='boss' OR status='active'
SQLを直に指定できるので、細かい条件があったら、この方法で...
** like() … LIKE句を生成 [#tbbcc404]
like()メソッドに渡されるすべての値は自動でエスケープされ...
$this->db->like('title', 'match');
// WHERE title LIKE '%match%'
- like()メソッドを複数回呼ぶと、ANDで連結される。
$this->db->like('title', 'match');
$this->db->like('body', 'match');
// WHERE title LIKE '%match%' AND body LIKE '%match%'
- ワイルドカード (%) が付加される場所を指定したい場合は、...
- 'before'、'after'、'both'(デフォルト値)が指定できる選...
$this->db->like('title', 'match', 'before');
// WHERE title LIKE '%match'
$this->db->like('title', 'match', 'after');
// WHERE title LIKE 'match%'
$this->db->like('title', 'match', 'both');
// WHERE title LIKE '%match%'
// $this->db->like('title', 'match'); と同じ動作
- 連想配列で一度に指定する方法
$array = array('title' => $match, 'page1' => $match, 'pa...
$this->db->like($array);
// WHERE title LIKE '%match%' AND page1 LIKE '%match%' A...
デバッグ時の手間を考えると、like()メソッドを複数回呼び出...
* 問合せ結果の処理 [#f7fcadd9]
** query() … クエリーの実行 [#g04c7150]
$sql = "SELECT * FROM mytable WHERE user = ?";
$param = array($user);
$query = $this->db->query($sql, $param);
** result_array() … クエリーの結果を配列で返す [#r6a142b1]
$this->db->select('title, name, date');
$this->db->from('mytable');
$query = $this->db->get();
// SELECT title, content, date FROM mytable
$result = $query->result_array();
foreach ($result as $row)
{
$title = $row['title'];
$name = $row['name'];
$date = $row['date'];
echo "title=".$title." / name=".$name." / date=".$date...
}
** num_rows() … クエリで返されたレコード数を取得 [#v33788...
$this->db->select('title, name, date');
$query = $this->db->get('mytable');
echo $query->num_rows();
// 3 のような整数が出力される(取得されたレコード数は3件...
** row_array() … クエリーの結果を1行だけ返す [#c1c16374]
$this->db->select('title, name, date');
$this->db->where('name', 'Joe');
$this->db->from('mytable');
$query = $this->db->get();
// SELECT title, name, date FROM mytable WHERE name = 'J...
if ($query->num_rows() > 0)
{
$row = $query->row_array();
echo $row['title'];
echo $row['name'];
echo $row['date'];
}
- 特定の行を返したいときは、第1引数に、行番号を数値とし...
$row = $query->row_array(5);
** first_row()、last_row()、next_row()、previous_row() … ...
- 結果を「進む」「もどる」「最初に移動」「最後に移動」し...
$row = $query->first_row('array')
$row = $query->last_row('array')
$row = $query->next_row('array')
$row = $query->previous_row('array')
引数に"array"と指定しなければ、デフォルトでは、これらのメ...
** count_all() … テーブルの全レコード数を取得 [#i7d5cab1]
echo $this->db->count_all('my_table');
// 25 のような整数が出力される(全レコード数は25件だった)
** count_all_results() … 条件を指定してレコード数を取得 [...
- 第1引数でテーブル名を指定できる。
- 条件を指定しない場合、count_all()メソッドと同様に、テー...
echo $this->db->count_all_results('my_table');
// 25 のような整数が出力される(全レコード数は25件だった)
- 条件を指定して、絞り込んだ件数を数えることができる。
$this->db->like('title', '重要');
$this->db->from('my_table');
echo $this->db->count_all_results();
// 17 のような整数が出力される。(条件に合うレコード数は...
* 書き込み Write [#a8a25066]
** insert() … データの挿入 [#tb5d6f7f]
$data['title'] = 'My title';
$data['name'] = 'My Name';
$data['date'] = 'My date';
$this->db->insert('mytable', $data);
// INSERT INTO mytable (title, name, date) VALUES ('My t...
** insert_id() … 挿入されたデータのID番号を取得 [#a14b35e3]
echo $this->db->insert_id();
// 25 のような整数が出力される(挿入されたレコードは25件...
** update() … データの更新 [#wf23c9ef]
update($table = '', $set = NULL, $where = NULL, $limit =...
+ 第1引数: テーブル名を指定
+ 第2引数: 更新するデータを連想配列で指定
→ set()メソッドで指定してもOK
+ 第3引数: 更新条件(WHERE句)を連想配列で指定
→ where()メソッドで指定してもOK
+ 第4引数: 更新行数の最大値を指定
→ limit()メソッドで指定してもOK
$table = 'mytable';
$data['title'] = $title;
$data['name'] = $name;
$data['date'] = $date;
$where['id'] = $id;
$this->db->update($table, $data, $where);
// UPDATE mytable
// SET title = '{$title}', name = '{$name}', date = '{$d...
// WHERE id = $id
** delete() … データの削除 [#c691729c]
+ 第1引数: テーブル名を指定
+ 第2引数: WHERE句を指定
→ where()メソッドで指定してもOK
$table = 'mytable';
$where['id'] = $id;
$this->db->delete($table, $where);
// DELETE FROM mytable
// WHERE id = $id
** affected_rows() … 処理されたレコード数を取得 [#s745637e]
書き込みタイプのクエリー (insert、updateなど) が実行され...
echo $this->db->affected_rows();
// 3 のような整数が出力される(処理されたレコード数は3件...
- MySQLでは、"DELETE FROM TABLE" を実行すると0行と返す。
** truncate() … テーブルの全データを削除 [#d485ce24]
$table = 'mytable';
$this->db->truncate($table);
// TRUNCATE mytable
* 後始末 [#rc530b0a]
** free_result() … メモリの解放 [#wc53dded]
- 結果に関連付けられたメモリを解放し、結果のリソースIDを...
- 通常、PHPは、スクリプトの実行を終えると、メモリを自動的...
- しかし、特定のスクリプトで多くのクエリを実行したとき、...
$query = $this->db->query('SELECT title FROM my_table');
foreach ($query->result() as $row)
{
echo $row->title;
}
$query->free_result(); // 結果オブジェクトの $query はも...
$query2 = $this->db->query('SELECT name FROM some_table');
$row = $query2->row();
echo $row->name;
$query2->free_result(); // 結果オブジェクトの $query2 は...
ページ名: