Class-DBIであるカラムに設定する値を自動処理する方法
なんとなく、Class-DBIのテキスト自体が不親切のようなので。ある値がvalidかどうかの処理の仕方はあるが、validな物に変換する方法は直感的にはわかりづらい。
たとえば、日付を必要とするカラムに対して、西暦で入れても和暦で入れても最終的には西暦に変換してから設定したい場合など。
結論から言えば、add_constraintを使う。
__PACKAGE__->add_constraint( collumn_check=>column_name=>\&for_before_set_column ); # 第一引数は実際には、他の制約とかぶらなければなんでもよい。 # 第二引数は制約を設定するカラム名。 # 第三引数はサブルーチンのリファレンス。 sub for_before_set_column { # 入力された値、レコードのオブジェクト、カラム名、現在の値を取得 my ($value, $self, $column_name, $changing) = @_; # $changingはハッシュリファレンスで、このオブジェクトの現在の値が入っている。 # ここで$valueに対して、必要な加工をする。 # 必要なら$changingに収められた他のカラムを参照しつつ処理する。 $changing->{$column_name} = $value; # $changingの$column_nameに$valueを設定する。 return 1; # 明示的に正を返すのが吉。 }