postgresql Laravel迁移中的非主要、自动递增整数

axzmvihb  于 2022-11-04  发布在  PostgreSQL
关注(0)|答案(2)|浏览(159)

我在网上搜过了。
我想做的是:
我有一个主表id,我需要添加一个名为ex.order_number的列,该列从1000开始自动递增。
问题:
PHP似乎不喜欢这样,它抛出了一个错误

SQLSTATE[42P16]: Invalid table definition: 7 ERROR:  multiple primary keys for table "orders" are not allowed (SQL: alter table "orders" add column "order_number" serial primary key not null)

我的代码:

public function up()
    {
        Schema::table('orders', function (Blueprint $table) {
            $last_id = Order::orderBy('id', 'desc')->first()->id;
            $table->integer('order_number', true, true)->from($last_id + 10001);
        });

        foreach (Order::get() as $order) {
            $order->update([
                'order_number' => 10000 + $order->id
            ]);
        }
    }
hgqdbh6s

hgqdbh6s1#

不需要在中使用其他参数

$table->integer('column name')

仅用于:-

public function up()
    {
        Schema::table('orders', function (Blueprint $table) {
            $last_id = Order::orderBy('id', 'desc')->first()->id;
            $table->integer('order_number')->from($last_id + 10001);
        });
    }
sqserrrh

sqserrrh2#

我想我们可以做一个变通的办法让它发挥作用。

public function up()
    {
        Schema::table('orders', function (Blueprint $table) {
               $table->bigIncrements('order_number');

              // if it is making both as primary key
              //drop the primary key constraint from one
              $table->dropPrimary('orders_order_number_primary');

              $table->id();
        });
    }

我还没有测试过它,但是我觉得它会工作,甚至我觉得,如果我们使用id()作为主键,可能bigIncrements不会被视为主键。
使用模型观察器,在created()上,你可以使用id来设置order_number,或者如果你想在creating中也这样做,你可以根据最后插入的id来做,这可能是正确的方式。

  • 注意:您对order_number的可能值进行了一些自定义,但我认为您可以在模型中使用该解决方案,而且我还假设问题是关于我们是否可以在一个表中有两个自动增量字段。*

相关问题