使用cakephp中的范围验证字段是唯一的

时间:2017-02-13 15:44:00

标签: validation cakephp scope unique composite-key

我正在创建一个CakePHP应用程序,它有一个编辑表单,其中包含一个名为air_id的文本框。在我的表中,我使用project_id和air_id作为复合主键。因此,在更新air_id时,我需要验证唯一性。 我的表格结构如下:

   project_id         air_id       
       1            test@test.com  
       1            test1@test.com

目前我正在使用cakephp3.0,我正在使用带有范围的validateUnique规则, 以下是我的代码:

 $validator
        ->add('air_id', [
            'unique' => [
                'rule' => ['validateUnique', ['scope' => 'project_id']],
                'provider' => 'table',
            ]
]);

我的控制器就像这样

$projectCustomers = $this->ProjectCustomers->newEntity($formData);

现在每次都会给出验证消息。我需要的是当我将值test@test.com更改为test1@test.com时,它应该引发错误,如果我将其更改为其他值,则不应该引发错误。我的验证有问题吗?

1 个答案:

答案 0 :(得分:2)

CakePHP独特字段规则:

我们有cakephp独特的字段规则可能更好:

在你的表格中(例如UsersTable.php):

 public function buildRules(RulesChecker $rules)
 {
    $rules->add($rules->isUnique(
       ['air_id', 'project_id'],
       'Your validation error here.'
    ));

    return $rules;
 }

在表格的顶部,不要忘记包含这个类:

use Cake\ORM\RulesChecker;

见这里(CakePHP Unique Fields Rules)。