「独自の」検証ルールが存在しますか (存在する場合、どのように実装しますか?)、またはコールバックを介して実装する必要がありますか? ありがとう。
5053 次
3 に答える
3
)私が知る限り、検証クラスの普遍的な「一意の」(または「is_unique」)ルールはありません。これはおそらく、この種のチェックの定期的な性質が原因ではありません。
ただし、うまくやりたい場合は、アプリケーションで使用するすべてのモデルに対して「ベースモデル」を作成できます(ベースモデルを拡張するようにします)。次に、一意性は次のように多かれ少なかれチェックできます。
public function is_unique($id)
{
return ! (bool) DB::select(array(DB::expr('COUNT(id)'), 'total'))
->from($this->_table_name)
->where('id', '=', $id)
->execute()
->get('total');
}
検証ルールで、次のルールを追加する必要があります。
array('id' => array(array(array($this, 'is_unique')));
推奨されるように、メソッドに内部モデルルールを保存していrules()
ます。したがって、これは実際の例である可能性があります。
class Model_Base_Model extends ORM
{
public function rules()
{
return array(
'id' => array(
array(array($this, 'is_unique')),
);
}
public function is_unique($id)
{
return ! (bool) DB::select(array(DB::expr('COUNT(id)'), 'total'))
->from($this->_table_name)
->where('id', '=', $id)
->execute()
->get('total');
}
}
これで、 Model_Base_Modelを拡張するすべてのモデルが、作成中にその一意性を確認できるようになります。お役に立てれば!:)
于 2011-06-02T18:36:13.370 に答える
3
Kohana 3.2 では、ORM にはチェックを行う unique() メソッドがあります。3.1 に存在するかどうかはわかりませんが、存在するはずです。
これで、次のようにモデルにルールを追加できます。
array(array($this, 'unique'), array('some_field', ':value')),
some_field が一意かどうかを確認します
于 2012-01-13T16:06:26.860 に答える
0
于 2011-06-02T18:28:36.990 に答える