Yii2迁移中的缓慢行为

时间:2018-08-27 11:57:40

标签: yii2 migration behavior slug

我想将新列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 :(得分:0)

看起来一切都对行为有好处。问题出在西里尔字母和php配置上。