Model:The combination "2"-"1404" of Poisk and Post has already been taken.
Код: Выделить всё
...
[['Poisk', 'Post'], 'unique', 'targetAttribute' => ['Poisk', 'Post']],
...
Model:The combination "2"-"1404" of Poisk and Post has already been taken.
Код: Выделить всё
...
[['Poisk', 'Post'], 'unique', 'targetAttribute' => ['Poisk', 'Post']],
...
Код: Выделить всё
// В rules
...
[['agent_is_deputy_manager'], 'validateDeputyManager'],
...
// Далее в модели
public function validateDeputyManager($attribute, $params)
{
if ($this->agent_is_deputy_manager === 1) {
$query = Agents::find()->andWhere(['agent_supervisor_user_id' => $this->agent_supervisor_user_id, 'agent_is_deputy_manager' => 1]);
if (!$this->isNewRecord) {
$query->andWhere(['!=', 'agent_id', $this->agent_id]);
}
$deputyManager = $query->one();
if ($deputyManager) {
$this->addError($attribute, 'Агент не может быть заместителем, т.к. у менеджера уже назначен заместитель - ' . $deputyManager->agent_full_name);
}
}
}
Да. Все понял. Спасибо. Буду продолжатьAlexum писал(а): ↑2017.10.17, 14:03 Вы не так поняли, для стандартного валидатора можно задать 'message' => 'Текст сообщения' , но внутри этого сообщения можно использовать только плейсхолдеры {attribute}, {attributes}, {value}, {values}. Если вам нужны данные из связной модели то потребуется - написать свой валидатор.
Ниже пример НЕ на уникальность, но общий смысл должен быть понятен.Код: Выделить всё
// В rules ... [['agent_is_deputy_manager'], 'validateDeputyManager'], ... // Далее в модели public function validateDeputyManager($attribute, $params) { if ($this->agent_is_deputy_manager === 1) { $query = Agents::find()->andWhere(['agent_supervisor_user_id' => $this->agent_supervisor_user_id, 'agent_is_deputy_manager' => 1]); if (!$this->isNewRecord) { $query->andWhere(['!=', 'agent_id', $this->agent_id]); } $deputyManager = $query->one(); if ($deputyManager) { $this->addError($attribute, 'Агент не может быть заместителем, т.к. у менеджера уже назначен заместитель - ' . $deputyManager->agent_full_name); } } }