2017-02-13 34 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', 
      ] 
]); 

И мой контроллер, как это

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

Теперь он дает подтверждение валидации каждый раз. Мне нужно, когда я изменяю значение [email protected] на [email protected], он должен поднять ошибку, и если я изменю его на какое-то другое значение, он не должен поднимать ошибку. Что-то не так в моей проверке?

+0

Вы хотите, чтобы поле 'air_id' было уникальным для конкретного project_id? –

+0

«** _ Теперь он дает подтверждение валидации каждый раз, когда я менял значение [email protected] на [email protected]_**« Это именно то, что ожидается, учитывая содержимое ваших таблиц, где '1, test1 @ test.com' уже существует. Пожалуйста, обновите свой вопрос, указав правильные детали, описывающие фактическую техническую проблему, с которой вы сталкиваетесь. – ndm

+0

@ndm Теперь он дает подтверждение валидации каждый раз. Мне нужно, когда я изменяю значение [email protected] на [email protected], он должен поднять ошибку, и если я изменю его на какое-то другое значение, он не должен поднимать ошибку. –

ответ

0

CakePHP Уникальные правила Field:

У нас есть 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).