Добрый день! подскажите как мне построить правило У меня 2 связанные модели

Material и Data
у Material есть поле category
у Data поле content

как написать правило что поле content обязательно если Material->category == 5?

при сохранении формы я делаю

if (
$material->load(Yii::$app->request->post()) &&
$data->load(Yii::$app->request->post())
) {
$valid = $material->validate();
$valid = $data->validate(['title', 'content']) && $valid;
if($valid){
$model->save();
$model->link('data', $data);
}
}

получается надо либо валидировать после связывания, либо создавать переменную в Data и присваивать перед валидацией

16 ответов

34 просмотра

Создаёшь одновременно?

'when' => function (self $model) { return $model->material->category === 5; }

teddy-westside Автор вопроса
teddy westside
одновременно

сохраняй сначала материал, потом добавь правило Артура в дату и пускай валидацию даты после сохранения материала

teddy-westside Автор вопроса
Артур Квиташ
'when' => function (self $model) { return $mod...

да но. но это если они уже существуют

teddy-westside Автор вопроса

тогда и Data надо сохранить в сценарии без поля content, а потом валидировать с ней

teddy westside
тогда и Data надо сохранить в сценарии без поля co...

так ты не говорил что content должно быть пустое при category!=5

teddy westside
да но. но это если они уже существуют

так а что мешает загрузить данные в модели, провалидировать и потом сохранить, и связь проставить?

teddy-westside Автор вопроса
Артур Квиташ
так а что мешает загрузить данные в модели, провал...

Материал - данные загрузил проваледировал сохранили Дата данные загрузил а тут еще нет связи с нет и поэтому работать не будет

teddy westside
Материал - данные загрузил проваледировал сохранил...

так проставь связь вручную. $model->populateRelation

teddy-westside Автор вопроса

Во лапшекод.

Зачем тебе две модельки? Сделал бы форму, где бы провалидивал все поля.

обмажутся своими дто и ябут друг друга в жёпы

Похожие вопросы

Обсуждают сегодня

Приветствую всех, возникла проблема, до этого писал бота в простом формате где при выполнении условий приходило через send_message информация, сейчас решил добавить хендлер на...
Andrew
4
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
Ребят, привет. У кого-то есть опыт заказа мерча в сторе? Есть успешные кейсы? Чёт у меня турецкую карту не принимает
Vladimir F.
7
Ребят, а больше никто поработать не хочет? Кто свободен?
AIZ
4
Портфолио: Зовут меня Александр, мне 41 год. Город Киров. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github.co...
Magic
11
Всем привет. Есть кто разбирается в платежках? Что б принимать из других стран и выплачивать рф снг
Musa
6
Приветствую всех, есть вопросик. Передали проект на OctoberCms, без инсталяшки в полуразвернутом виде, нужно было залить бекап бд, после залития бд, оказалось, что части строк...
Лео
14
где собака, админ группы? нычкуется и боится проявить волю, в толерантность еще не наигрался? @yelizariev
Ognezar
61
Есть магистры regex в чате? Задача: нужно написать regex который мэтчит полные (без сокращений по типу ::1/128) ipv6 адреса кроме 2001:0df7:cef7:29f7:52f7:adf7:2cf7:4ff7, при ...
Илья
5
Подскажите, пожалуйста, где в backende, или не в нем можно дату поправить? Логирует действия не в том часовом поясе
Лео
7
Карта сайта