Laravel 迁移:将多个值合并到一个新列中

Laravel Migration: Combine multiple values in a new colum

我正在尝试使用 Laravel 进行迁移。这个想法是在不同的 table 中获取 'code' 和 'id' 列的值,并将它们合并到一个带有 '-' 分隔符的 'name' 列中。 所以部分是 SQL 问题。

目前我正在尝试这样的事情。

第一次迁移以创建新列'name'

public function up()
{
    Schema::table('work_order', function (Blueprint $table) {
        $table->string('name')->nullable();
    });
}

(工作正常)

然后第二次迁移以用值填充新列

class AlterColumnNameWorkOrder extends Migration
{
    public function up()
    {
        
        $company_code = DB::statement("SELECT code FROM company");
        $campaign_code = DB::statement("SELECT code FROM campaign");
        $work_order_number = DB::statement("SELECT id FROM work_order");

        DB::statement("UPDATE work_order SET name = $company_code + '-' + $campaign_code + '-' + $work_order_number");
    }

我遇到了这个错误

SQLSTATE[22P02]: Invalid text representation: 7 ERROR:  invalid input syntax for integer: "-"  
  LINE 1: UPDATE work_order SET name = 1 + '-' + 1 + '-' + 1 

我在想我得到的不是值而是索引。

更新:我通过将 + 替换为 || 解决了问题。但现在在 'name' 列中,我的所有值都是“1-1-1”。这些值未被表示。我错过了什么?

更新 2:我注意到我定义了一个不必要的变量 $work_order_number。由于属于同一个table 待更新。所以我把它去掉,直接把字段“id”放在语句中。

DB::statement("UPDATE work_order SET name = $company_code || '-' || $campaign_code || '-' || id");

现在第三个值显示正确。这减少了我从另一个 table 获取值到列中的问题。

首先,您不应该使用迁移来填充数据库。阅读有关种子的 documentation

此外,我认为您的 select 查询是错误的。你是不是少了一个 where 子句?

运行 php artisan migrate 迁移您的数据库,然后创建一个新种子,并将其添加到 run 方法中:

$company_code = DB::table('company')->select('code')->where('id', some_id)->first()->code;

$campaing_code = DB::table('campaing')->select('code')->where('id', some_id)->first()->code;

$work_order_number = DB::table('work_number')->select('id')->where('id', some_id)->first()->id;

$sql = "UPDATE work_order SET name = concat('{$company_code}', '-', '{$campaign_code}', '-', '{$work_order_number}');

DB::statement(DB::raw($sql));

现在,只需 运行 php artisan db:seed --class=YourSeedClassName 就可以了。