FuelPHPのドキュメントにも例がありますが、FuelPHPのValidationでuniqueチェックを作ってみました。
本家の例ではValidationを拡張する例として記載があります。
http://fuelphp.com/docs/classes/validation/validation.html
但し、DBへのInsert時は上記の拡張例で問題ないのですが、Update時は、
更新するレコード自身を含めてしまうとuniqueチェックで引っかかってしまうため、除外する必要があります。
その処理を公式ドキュメントの例を参考にコードを追加してみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<!--?php class Validation extends \Fuel\Core\Validation { public static function _validation_unique($val, $options, $id=null) { list($table, $field) = explode('.', $options); if (isset($id)) { $result = \DB::select(\DB::expr("LOWER (\"$field\")")) ->where($field, '=', \Str::lower($val)) ->and_where('id', '<>', $id) ->from($table)->execute(); } else { $result = \DB::select(\DB::expr("LOWER (\"$field\")")) ->where($field, '=', \Str::lower($val)) ->from($table)->execute(); } return ! ($result->count() > 0); } } </pre--> |
また、コアクラスを拡張しているため、/fuel/app/bootstrap.phpを編集する必要があります。
1 2 3 4 5 |
Autoloader::add_classes(array( // ここにオーバーライドしたいクラスを追加します // Example: 'View' => APPPATH.'classes/view.php', 'Validation' => APPPATH.'classes/validation.php', )); |
Modelのコード使用例は以下の通りです。
1 2 3 4 5 6 7 8 9 |
public static function validate($id=null) { $val = \Validation::forge(); $val->add_field('group_code', 'グループコード', 'required|min_length[1]|max_length[4]') ->add_rule('unique', self::$_table_name . '.group_code', $id); return $val; } |
Controllerのコード例は以下の通りです。
■Insert例
1 |
$val = Model_Group::validate(); |
■Update例
1 |
$val = Model_Group::validate($post->id); |
Leave a Reply