运行迁移时执行查询 - Laravel

时间:2017-12-20 23:58:26

标签: laravel laravel-5

我不确定迁移是否是最佳解决方案,但我会解释我的问题......

我需要运行一个例程来填充数据库中的新列,基本上这个例程将获取所有没有值执行函数的记录,这些记录很受欢迎......

此脚本只会使用一次,在我添加默认为null的列后,添加列后会填充字段......

注意:该表已有记录

达到预期效果的最佳途径是什么?

我试过了:

public function up()
{

    $allCategories = Category::where('slug', null)->get();

    foreach($allCategories as $singleCategory ){
        $singleCategory->update([
            'slug' => Category::makeSlug( $singleCategory->name, $singleCategory->parent_id)
        ]);
    }
}

但这不起作用

2 个答案:

答案 0 :(得分:1)

我弄清楚为什么它没有填充......忘记将该字段标记为模型上的细丝..

抱歉,初学者错误,rsrs

答案 1 :(得分:1)

您应该能够在新迁移中向新字段添加数据。我不确定这是否是最好的方式,但我之前见过这样的事情:

public function up()
{
    Schema::table('my_table', function (Blueprint $table) {
        $table->string('my_column')->nullable();
    });
    $this->updateData();
}

private function updateData()
{
    $allCategories = Category::where('slug', null)->get();

    foreach($allCategories as $singleCategory) {
        $singleCategory->update([
            'slug' => Category::makeSlug($singleCategory->name, $singleCategory->parent_id)
        ]);
    }
}

假设您的类别模型已命名并且Category::makeSlug()存在,则应更新您的null slugs。