Я хочу добавить новый столбец 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();
}
}