运行迁移时执行查询 - Laravel

问题描述 投票:0回答:2

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

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

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

注意:该表已有记录

对我来说,达到预期结果的最佳方式是什么?

我试过了:

public function up()
{

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

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

但这不起作用

laravel laravel-5
2个回答
1
投票

我弄清楚为什么它没有填充......忘了将字段标记为可填写模型..

对不起,初学者错误,rsrs


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模型是命名空间且Category::makeSlug()存在,这应该更新您的null slugs。

© www.soinside.com 2019 - 2024. All rights reserved.