Yii2 вялое поведение в миграции - PullRequest
0 голосов
/ 27 августа 2018

Я хочу добавить новый столбец slug в существующую таблицу. Вот мой код миграции:

$this->addColumn('region', 'slug', $this->string()->unique());

Также я хочу избежать NULL в существующих записях. Для этого я создал поведение:

public function behaviors()
{
    return [
        ...
        [
            'class' => SluggableBehavior::className(),
            'attribute' => 'title_ru',
            'slugAttribute' => 'slug',
            'ensureUnique' => true,
            'immutable' => true,
            'skipOnEmpty' => false,
        ],
        ...
    ];
}

И правила:

public function rules()
{
    return [
        ...
        [['slug'], 'string', 'max' => 256],
        [['slug'], 'unique'],
        ...
    ];
}

Поэтому я подумал, что если я вызову метод save(), slug будет автоматически сгенерирован в существующей записи. Вот мой простой код в той же миграции:

$regions = Region::find()->all();
foreach ($regions as $region) {
    $region->save();
}

Но это не работает так, как ожидалось:

+----+------------------------+------------------------+------+
| id | title_ru               | title_uk               | slug |
+----+------------------------+------------------------+------+
|  1 | Интернет               | Інтернет               |      |
|  2 | Интернет+ТВ            | Інтернет+ТБ            | -2   |
|  3 | Корпоративным клиентам | Корпоративним кліентам | -3   |
+----+------------------------+------------------------+------+

Что я делаю не так? Спасибо за любой совет.

Еще более странным является то, что все отлично работает в админах CRUD.


ОБНОВЛЕНИЕ # 1

Пытался использовать метод validate(), но все равно безрезультатно.

$regions = Region::find()->all();
foreach ($regions as $region) {
    if ($region->validate()) {
        $region->save();
    }
}

1 Ответ

0 голосов
/ 27 августа 2018

Похоже, с поведением все хорошо.Проблема в символах кириллицы и конфигурации php.

...