在laravel迁移中,基于公司的自动增量。

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

我需要创建一个基于公司ID的序列列的迁移,有什么方法可以让我使用migrations创建一个基于公司ID的自动递增列(序列),而不仅仅是整个列的自动递增?

companyID sequence
1         1
1         2
2         1
2         2

有什么方法可以让我使用migrations创建一个自动递增的列(sequence),根据公司id进行递增,而不只是将该列作为一个整体进行自动递增?

这是我目前的情况。

$table->unsignedInteger('companyID');
$table->foreign('companyID')->references('id')->on('company');
$table->increments('sequence');
laravel
1个回答
1
投票

你不能使用 increments 领域 sequence. increments 你必须根据公司ID手动增加序列列的值。

我猜你的模型名称是 Company. 所以在创建新记录时,先创建记录,然后统计公司id的出现次数。之后,在序列字段中更新count

$company = Company::create(['companyID' => 1, 'sequence'=>0]);
$count = Company::where('companyID', 1)->count();
$company->sequence = $count;
$company->save();

0
投票

你需要使用MYSQL触发器来实现这个目的。

    public function up()
    {
        DB::unprepared('
            CREATE TRIGGER sequence_trigger
            BEFORE INSERT
               ON companies FOR EACH ROW

            BEGIN
               DECLARE sequence_t int;
               SELECT IFNULL(MAX(sequence), 0) + 1 INTO sequence_t WHERE companyID = NEW.companyID ;
               SET NEW.sequence = sequence_t;
            END;
        ');
    }

    public function down()
    {
        DB::unprepared('DROP TRIGGER `sequence_trigger`');
    }

触发器是以INSERT、UPDATE或DELETE事件执行的SQL代码。

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