使用方法
命名規則
CBL_ActiveRecord クラスから派生するクラスの名前はデータベース内のテーブル名と対応します。
例えば、テーブル名が 'user' の場合、クラス名は 'User' とする必要があります。
例
データベースへの接続
$pdo = new PDO( 'mysql:dbname=todo;host=localhost', 'root', '' );
CBL_ActiveRecord::setDefaultPDO( $pdo );
クラス定義
require_once 'cbl_activerecord.php';
class User extends CBL_ActiveRecord
{
}
class ToDo extends CBL_ActiveRecord
{
}
レコードの挿入
id を指定しない場合:
$todo = new ToDo();
$todo->name = 'Planning'; // set property
$todo->save(); // or $todo->insert();
id を指定する場合:
$todo = new ToDo();
$todo->id = 1; // set id
$todo->name = 'Planning'; // set property
$todo->insert();
文字列型の id を指定する場合:
$todo = new ToDo();
$todo->id = '57f3d093' // set id
$todo->name = 'Planning'; // set property
$todo->insert();
文字列型のユニークな id を生成する場合:
$todo = new ToDo();
$todo->uniqid(); // create and set id (default id length is 8 characters)
$todo->name = 'Planning'; // set property
$todo->insert();
16バイトのユニークな id を生成する場合:
$todo = new ToDo();
$todo->uniqid(16); // create and set id (max id length is 32 characters)
$todo->name = 'Planning'; // set property
$todo->insert();
ユニークなIDを生成するだけの場合:
$todo = new ToDo();
$id = $todo->uniqid(8, FALSE);
レコードの取得
find() メソッドを使用する場合:
$todo = new ToDo();
$todo = $todo->find( $id ); // get record by id
コンストラクタを使用する場合:
try {
$todo = new ToDo( $id ); // get record by id
} catch ( Exception $e ) {
echo $e->getMessage(); // throw exception, if not found.
}
取得するカラムを指定する場合:
$todo = new Todo();
$todo = $todo->find( $id, array( 'columns'=>'id, name' ) );
レコードの更新
SQLでUPDATEを実行する前にSELECTを実行させる場合:
$todo = new ToDo( $id ); // get record by id
$todo->name = 'Scheduling'; // modify property
$todo->save(); // or $todo->update();
SQLでSELECTを実行させない場合:
$todo = new ToDo();
$todo->id = $id; // set record id directly
$todo->name = 'Scheduling'; // modify property
$todo->save(); // or $todo->udpate();
複数のレコードを同時に更新する場合:
$todo = new ToDo();
$id_list = array(1, 2, 5); // prepare id list
$todo->finish = 1; // modify property
$todo->update($id_list); // update() with $id_list parameter
レコードの削除
SQLでDELETEを実行する前にSELECTを実行させる場合:
$todo = new Todo( $id ); // get record by id
$todo->delete();
SQLでSELECTを実行させない場合:
$todo = new ToDo();
$todo->delete( $id );
レコード一覧の取得
全レコードを取得する場合:
$todo = new ToDo();
$todo_list = $todo->find_all();
foreach( $todo_list as $id=>$todo_item )
{
echo $todo_item->name;
}
特定の条件で検索する場合:
$user_id = intval( $user_id);
$todo = new ToDo();
$todo_list = $todo->find_all( array( 'conditions'=>"user_id={$user_id}" ) );
ソートする場合(order):
$todo = new ToDo();
$todo_list = $todo->find_all( array( 'order'=>'name' ) );
取得するレコード数を限定する場合(limit):
$todo = new ToDo();
$todo_list = $todo->find_all( array( 'limit'=>20 ) );
レコード取得開始位置を指定する場合(offset):
$todo = new ToDo();
$todo_list = $todo->find_all( array( 'offset'=>5, 'limit'=>20 ) );
取得するカラムを指定する場合:
$todo = new ToDo();
$todo_list = $todo->find_all( array( 'columns'='id, name' ) );
レコードの数の取得
全レコード数の場合:
$todo = new ToDo();
echo $todo->count();
ある条件下のレコード数の場合:
$todo = new ToDo();
echo $todo->count(array('conditions'=>'finish=1'));
リレーション
関連するレコードを1つ取得する場合:
$user = new User( $user_id ); // get user record
$todo = $user->todo->find( $id ); // get todo of todo.user_id={$user_id}
関連するレコードの一覧を取得する場合:
$user = new User( $user_id ); // get user record
$todo_list = $user->todo->find_all(); // get todo list of todo.user_id={$user_id}
INNOR JOIN を実行する場合(SELECT todo.*, user.name FROM todo INNER JOIN user ON todo.user_id=user.id):
$todo = new ToDo();
$todo_list = $todo->find_all(
array('columns'=>'todo.*, user.name'),
array('table'=>'user', 'lhs'=>'user_id', 'rhs'=>'id'));
ルートオブジェクト(CBL_ActiveRoot)の利用
$root = new CBL_ActiveRoot();
$todo = $root->todo->find( $id );
$todo_list = $root->todo->find_all( $id );