Мне нужно убедиться, что поле электронной почты уникально для текущей таблицы контактов, и я хочу убедиться, что это же письмо уникально и для таблицы пользователей. Если он не найден ни в одной из таблиц, разрешите сохранение данных.
Я не уверен, что получаю данные наилучшим образом. Это единственный способ, который я нашел для работы.
Кроме того, я могу заставить пользовательскую проверку работать, и она вернет false, если электронная почта существует, и true, если электронная почта не существует, но она все еще сохраняет данные. Не уверен, как сказать, чтобы не сохранять данные, если электронная почта была найдена.
Вот моя модель таблицы контактов в настоящее время:
<?php
namespace App\Model\Table;
use App\Model\Entity\Contact;
use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\ORM\TableRegistry;
use Cake\Validation\Validator;
/**
* Contacts Model
*/
class ContactsTable extends Table
{
/**
* Initialize method
*
* @param array $config The configuration for the Table.
* @return void
*/
public function initialize(array $config)
{
$this->table('contacts');
$this->displayField('first_name');
$this->primaryKey('id');
$this->addBehavior('Timestamp');
}
/**
* Default validation rules.
*
* @param \Cake\Validation\Validator $validator Validator instance.
* @return \Cake\Validation\Validator
*/
public function validationDefault(Validator $validator)
{
$validator
->allowEmpty('id', 'create');
$validator
->add('email', [
'validateEmail' => [
'rule' => 'validateEmail',
'provider' => 'table',
'message' => 'That email already exists'
]
])
->requirePresence('email', 'create')
->notEmpty('email');
return $validator;
}
//check that the email is unique in both the Contacts table and in the Users table
public function validateEmail($value, $context) {
$usersTable = TableRegistry::get('Users');
$contactsTable = TableRegistry::get('Contacts');
if ( $contactsTable->exists(['email' => $value]) || $usersTable->exists(['email' => $value]) ) {
return false;
} else {
return true;
}
}
}
Когда я впервые начал это дело, я не мог понять, как получить данные из таблицы, но я заставил его работать, используя метод из моего OP.
Однако я не думаю, что это лучший способ сделать это. Если у кого-то есть лучший способ, дайте мне знать.
Приведенный выше код работает с точки зрения проверки 2 таблиц на наличие уникального электронного письма.
Я также понял, как отобразить сообщение. Когда я сохранял данные, я переопределял объект $ contact, используя этот код:
if ($contact = $this->Contacts->save($contact)) {
//code to execute
}
Однажды я изменил это на:
$new_contact = $this->Contacts->save($contact)
Это начало работать.
Других решений пока нет …