Не могу разобраться с валидацией в YII2

231
03 августа 2021, 00:20

[![введите сюда описание изображения][1]][1]Есть таблица Traffic c полями way_id и time_start. Необходимо чтобы при добавлении новой записи в поле time_start, выполнялась проверка по двум условиям, есть ли в таблице запись с таким же way_id, если есть то время должно быть в пределах больше time_start + 5 мин.

public $time_start_field_name;
 public $time_offset_min;
 public $time;
 public $w_id;
 public $t_offset;
 public $t_start;
public function rules()
{
    return [
        [['st_start', 'st_finish', 'train_id', 'way_id',/* 'date',*/ 'time_start'], 'required', 'message' => 'Должно быть заполнено'],
        [['st_start', 'st_finish', 'train_id', 'way_id'], 'integer'],
        [[/*'date', */'time_start'], 'safe'],
        [['st_start'], 'exist', 'skipOnError' => true, 'targetClass' => Station::className(), 'targetAttribute' => ['st_start' => 'id']],
        [['st_finish'], 'exist', 'skipOnError' => true, 'targetClass' => Station::className(), 'targetAttribute' => ['st_finish' => 'id']],
        [['way_id'], 'exist', 'skipOnError' => true, 'targetClass' => Way::className(), 'targetAttribute' => ['way_id' => 'id']],
        [['way_id'], 'myWayRule', 'params' =>['time_start_field_name' => 'time_start', 'time_offset_min' => 5]],
        [['train_id'], 'exist', 'skipOnError' => true, 'targetClass' => Train::className(), 'targetAttribute' => ['train_id' => 'id']],
    ];
}
public function myWayRule($attribute, $params, $validator) 
{
    $w_id = $this->$attribute;
    $t_start = $this->$params['time_start_field_name'];
    //$t_offset = $params['time_offset_min'];
    //$time = Traffic::find()->select('time_start')->where('way_id = w_id')->andWhere('time_start = t_start')->one();
    $time = Traffic::find()->where('way_id = :w_id', [':w_id' => $w_id])->andWhere('time_start = :t_start', [':t_start' => $t_start])->one();
    if( $time == $t_start )
        {
            $this->addError($attribute, 'Ошибка');
        }
}
Answer 1

Можно попробовать такое правило ['way_id', 'unique']

READ ALSO
Как добавить кнопки управления xDebug в PhpStorm?

Как добавить кнопки управления xDebug в PhpStorm?

Хотелось бы добавить свои кнопки управления в панель инструментов PhpStorm для быстрого переключения режимов отладки

145
Конвертация PHP в JS

Конвертация PHP в JS

Можно ли ,и как, данный PHP-скрипт полностью конвертировать в JS?

141
yii2, relations, как получить count()

yii2, relations, как получить count()

я пытаюсь получить количество видео из таблицы videos(),

185
Как активировать в Wordpress у плагина polylang Custom post types and Taxonomies

Как активировать в Wordpress у плагина polylang Custom post types and Taxonomies

Не могу активировать Custom post types and Taxonomies в polylang

180