2017-02-13 167 views
0

我正在创建一个CakePHP应用程序,它具有包含一个名为air_id的文本框的编辑窗体。在我的表中,我使用project_id和air_id作为复合主键。因此,在更新air_id时,我需要验证唯一性。 我的表结构是这样的:在cakephp中验证字段与作用域是唯一的

project_id   air_id  
     1   [email protected] 
     1   [email protected] 

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

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

我的控制器是这样

​​

现在它每次都在发送验证消息。我需要的是,当我将[email protected]更改为[email protected]时,它应该引发错误,如果我将其更改为其他值,则不应引起错误。我的验证有问题吗?

+0

你的意思是你需要为特定的project_id制作'air_id'字段吗? –

+0

“** _现在每次将值[email protected]更改为[email protected]_**时,它都会发送验证消息”这正是预期会发生的情况,因为您的表格内容为'1,test1 @ test.com'已经存在。请用适当的详细信息更新您的问题,描述您所面临的实际技术问题。 – ndm

+0

@ndm现在它每次都发送验证消息。我需要的是,当我将[email protected]更改为[email protected]时,它应该引发错误,如果我将其更改为其他值,则不应引起错误。 –

回答

0

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)。