我确信我不是第一个在表中拥有复合唯一键并且想要验证它们的人。我不想发明自行车,所以我先在这里问。我有几个表,其中有 'id' 列作为主键,另外两列作为唯一的复合键。最好有一个验证规则来检查提交的条目是否唯一,如果不是则显示验证错误。在 Cakephp 中,它可以通过自定义验证规则来完成。我很确定有人已经创建了这样的方法。
理想情况下,它应该是 app_model.php 中的一个方法,可以被不同的模型使用。
我确信我不是第一个在表中拥有复合唯一键并且想要验证它们的人。我不想发明自行车,所以我先在这里问。我有几个表,其中有 'id' 列作为主键,另外两列作为唯一的复合键。最好有一个验证规则来检查提交的条目是否唯一,如果不是则显示验证错误。在 Cakephp 中,它可以通过自定义验证规则来完成。我很确定有人已经创建了这样的方法。
理想情况下,它应该是 app_model.php 中的一个方法,可以被不同的模型使用。
我正在使用该功能:
function checkUnique($data, $fields) {
if (!is_array($fields)) {
$fields = array($fields);
}
foreach($fields as $key) {
$tmp[$key] = $this->data[$this->name][$key];
}
if (isset($this->data[$this->name][$this->primaryKey]) && $this->data[$this->name][$this->primaryKey] > 0) {
$tmp[$this->primaryKey." !="] = $this->data[$this->name][$this->primaryKey];
}
//return false;
return $this->isUnique($tmp, false);
}
基本上用法是:
'field1' => array(
'checkUnique' => array(
'rule' => array('checkUnique', array('field1', 'field2')),
'message' => 'This field need to be non-empty and the row need to be unique'
),
),
'field2' => array(
'checkUnique' => array(
'rule' => array('checkUnique', array('field1', 'field2')),
'message' => 'This field need to be non-empty and the row need to be unique'
),
),
所以基本上这将在每个字段下显示警告,说明它不是唯一的。
我经常使用它,它工作正常。
在过去几年发布的 CakePHP/2.x 版本中,该isUnique
规则可选地接受几个列:
$or
您可以通过提供多个字段并设置为来验证一组字段是否唯一false
:public $validate = array( 'email' => array( 'rule' => array('isUnique', array('email', 'username'), false), 'message' => 'This username & email combination has already been used.' ) );
我不确定该功能何时可用的确切版本,但直到 2014 年 10 月,核心中修复了一个针对 2.3 和 2.4 分支的错误。
您可以将它放在应用模型中,但我的建议是直接通过将规则与它的$validate
属性一起添加到模型中。
查看内置的isUnique 规则。