FuelPHPのModel_Crudクラスは、基本的なCRUD (Create, Read, Update, Delete) 操作のメソッドを提供している。Model_Crudクラスを継承したサブクラスは、テーブル名や主キーなどのプロパティを定義するだけで、基本的なCRUD操作を行うことができる。
Model_Crudクラスを継承したクラスの例を示す。
class Model_Employee extends \Model_Crud {
protected static $_table_name = 'employee';
protected static $_primary_key = 'empno';
}
employeeテーブルから主キーの値が1であるレコードを検索する例を示す。
$employee = Model_Employee::find_by_pk(1);
レコードの挿入及び更新に使う列名は$_properties
パラメータに設定する。
protected static $_properties = array(
'empno',
'empname',
'deptno',
'email'
);
レコード挿入時のデフォルト値は$_defaults
パラメータに設定する。
protected static $_defaults = array(
'deptno' => 1
);
入力値バリデーションとは、レコードの挿入又は更新時にレコードの値に不正な値が含まれていないか検証する機能である。入力値バリデーションのルールは$_rules
パラメータに設定する。
protected static $_rules = array(
'empno' => 'required',
'email' => 'required|valid_email'
);
バリデーションのラベルは$_labels
パラメータに設定する。
protected static $_labels = array(
'empno' => '従業員番号',
'email' => 'メールアドレス'
);
パラメータ | 説明 |
---|---|
$_table_name | 利用するテーブルの名前 |
$_primary_key | テーブルのidフィールド名 |
$_rules | 入力値のバリデーションルール |
$_labels | バリデーションのラベル |
$_properties | 更新又は保存に使う列名 |
$_created_at | 'created_at'のフィールド名 |
$_updated_at | 'updated_at'のフィールド名 |
$_mysql_timestamp | $_created_atと$_updated_atのフィールドにMySQLのタイムスタンプを入れるかどうか |
メソッド | 説明 |
---|---|
count | レコード件数を返す。 |
delete | レコードの削除 |
find | 配列で指定した条件に合致するすべてのレコードを検索する。 |
find_by | 指定した列と値に合致するすべてのレコードを検索する。 |
find_by_pk | 主キーによりレコードを検索する。 |
find_one_by | 指定した列と値により一つのレコードを検索する。 |
find_by_column | メソッド名の一部であるcolumn列と指定した値に合致するすべてのレコードを検索する。 |
find_one_by_column | メソッド名の一部であるcolumn列と指定した値に合致するひとつのレコードを検索する。 |
find_all | すべてのレコードを検索する。 |
forge | Model_Crudクラスの新しいインスタンスを返す。 |
frozen | レコードが凍結されているかチェックする。 |
pre_find | クエリの実行前に呼ばれるメソッド |
post_find | クエリ結果を返す前に呼ばれるメソッド |
save | レコードの挿入または更新 |
set | 現在のモデルインスタンスに配列を設定する。 |
is_new | レコードが新しいかをチェックする。 |
to_array | モデルのpublicの変数を返す。 |
pre_save | 挿入クエリの前に呼ばれるメソッド |
post_save | 挿入クエリの後に呼ばれるメソッド |
pre_update | 更新クエリの前に呼ばれるメソッド |
post_update | 更新クエリの後に呼ばれるメソッド |
pre_delete | 削除クエリの前に呼ばれるメソッド |
post_delete | 削除クエリの後に呼ばれるメソッド |
pre_validate | バリデーションの前に呼ばれるメソッド |
post_validate | バリデーションの後に呼ばれるメソッド |
prep_values | バリデーション又はクエリを実行する前に呼ばれるメソッド |
validates | インスタンスがvalidationをパスしたかどうかを返す。 |
validation | モデルのvalidationインスタンスを作成して返す。 |
function count($column = null, $distinct = true, $where = array(), $group_by = null)
レコードを削除して、削除した行数を戻り値として返す。
$employee = Model_Employee::find_by_pk(1);
if ($employee) {
$employee->delete();
}
function find($config = array(), $key = null)
$employee = Model_Employee(
array(
'select' => '*',
'where' => array('salary', '>=', '200000')
)
);
function find_by($column = null, $value = null, $operator = '=', $limit = null, $offset = 0)
75件のレコードを最大20件ずつ4回に分けて取得するには、$limit
に20、$offset
にそれぞれ0、1、2、3を指定してfind_by
メソッドを4回呼び出す。
主キーからレコードを検索する。レコードが見つかった場合、Model_Crudインスタンスを返す。レコードが見つからなかった場合、nullを返す。
static function find_by_pk($value)
$employee = Model_Employee::find_by_pk(1);
Model_Crudクラスのインスタンスを新たに生成して、戻り値として返す。
static function forge($data = array())
Model_Crudを継承したクラスのインスタンスをデフォルト値で生成する例を示す。
$employee = Model_Employee::forge();
Model_Crudを継承したクラスのインスタンスを初期値を指定して生成する例を示す。
$employee = Model_Employee::forge(array(
'empno' => 1,
'empname' => '堀内まり菜',
'deptno' => 1,
'email' => 'marina@example.com'
));
frozenメソッドは、引数を省略した場合、レコードが凍結されているかどうかを戻り値として返す。boolean型の引数を指定した場合、レコードを凍結するかどうかを設定する。
function frozen($frozen = null)
クエリを実行する前に呼び出されるメソッド
static function pre_find(&$query)
protected static function pre_find(&$query) {
// クエリの変更
$query->where('active', 'yes');
}
レコードを挿入または更新する。レコードの挿入又は更新に成功した場合、そのレコードを返す。レコードの挿入又は更新に失敗した場合、falseを返す。
function save($validate = true)
レコードを挿入する例を示す。
$empolyee = Model_Employee::forge()->set(array(
'empno' => 1,
'empname' => '堀内まり菜',
'deptno' => 1
));
$result = $employee->save();
レコードを更新する例を示す。
$employee = Model_Employee::find_by_pk(1);
$employee->deptno = 2;
$employee->save();
現在のモデルインスタンスに配列を設定する。
function set($values)
$empolyee = Model_Employee::forge()->set(array(
'empno' => 1,
'empname' => '堀内まり菜',
'deptno' => 1
));
このインスタンスのバリデーションを実行する。バリデーションが成功した場合はtrue、バリデーションが失敗した場合はfalseを戻り値として返す。
Validationクラスのインスタンスを生成して戻り値として返す。
$employee = Model_Employee::find_by_pk(1);
$validation = $employee->validation();