Я написал собственный метод правил для проверки наличия записи в БД перед добавлением новой записи. Я поместил метод в поведение, чтобы я мог поделиться им с другими моделями, но я столкнулся с ситуацией с курицей и яйцом.CakePHP Подтвердить конкретное правило только в том случае, если пара обязательных полей не пуста
Чтобы узнать, есть ли у категории определенное имя группы, мне нужно иметь идентификатор категории и имя группы. Поэтому я передаю эти ключи с помощью моего собственного правила (category_id и name). Но это не сработает, так как если я не выберу category_id по ошибке, тогда запрос будет происходить только по имени, поэтому я исправил это с помощью пары строк, но мне нужно вернуть true, если это так, и банк проверка категории_id недействительна.
Есть ли лучший способ реализовать такую проверку? Разве это не так плохо, как я думаю? Или просто не беспокойтесь, и в моем контроллере drop hasAny() при моем вызове validates(), если он пройдет.
MODEL:
public $validate = [
'category_id' => [
'rule' => 'notEmpty',
'message' => 'Category is required.'
],
'name' => [
'notEmpty' => [
'rule' => 'notEmpty',
'message' => 'Team is required.'
],
'recordExists' => [
'rule' => [ 'recordExists', [ 'category_id', 'name' ] ],
'message' => 'Group already exists.'
]
]
];
// BEHAVIOR:
public function recordExists(Model $Model, $conditions, $requireKeys)
{
// Overrite conditions to
$conditions = $Model->data[ $Model->name ];
// Trim all array elements and filter out any empty indexes
$conditions = array_map('trim', $conditions);
$conditions = array_filter($conditions);
// Get the remaining non-empty keys
$conditionKeys = array_keys($conditions);
// Only query for record if all required keys are in conditions
if (empty(array_diff($requireKeys, $conditionKeys))) {
return !$Model->hasAny($conditions);
}
// NOTE: seems wrong to return true based on the assumption the category_id validation has probably failed
return true;
}