【问题标题】:Laravel Migration: auto increment key when it is not primaryLaravel 迁移:非主键时自动递增键
【发布时间】:2014-12-28 21:01:33
【问题描述】:

我正在尝试使用 Laravel 迁移创建一个表,但遇到了一些麻烦。 我只需要创建一个带有主对('id' 和'revision')的表,'id' 是一个自动增量。 我可以在 MySQL 中做到这一点,但我无法使用 Laravel 迁移来做到这一点,因为 increments() 也将该字段设置为主要字段。 到目前为止,我有这个:

Schema::create('bibliographies', function(Blueprint $table)
    {
        $table->increments('id');
        $table->integer('revision');
        ...
        $table->timestamps();
        $table->softDeletes();
        $table->primary(array('id', 'revision'));
    });

注意:更改 increments() 方法不是一个选项,因为它是 Laravel 核心。

提前感谢您的帮助。

【问题讨论】:

    标签: php mysql laravel laravel-4 database-migration


    【解决方案1】:

    在您重新添加之前只需drop the primary key

    $table->dropPrimary( 'id' );
    $table->primary( array( 'id', 'revision' ) );
    

    【讨论】:

    • 我已经尝试过了,但没有成功。它返回给我这个错误:[Illuminate\Database\QueryException] SQLSTATE[42000]:语法错误或访问冲突:1075 表定义不正确;只能有一个自动列,并且必须将其定义为键(SQL:alter table bibliographies drop primary key)此外,创建表时仅使用“id”作为主键,我需要手动删除它。
    • @CarlosMaia 假设您实际上并不需要将一对列作为主列,您可以毫无问题地将它们设为unique - 这行得通吗?
    • @Joe,我也面临同样的问题。但我不想让我的其他专栏独一无二,也不是主要的。怎么办?
    • @MASh 我不确定我明白你在问什么
    • @MASh StackExchange 101:当你解决你的问题时,告诉其他人,这样他们也可以学习。这不是一条单行道——你也应该回馈社区。你是怎么解决你的问题的?
    【解决方案2】:
     $table->unsignedInteger('id')->change();//will remove the auto increment
     $table->dropPrimary('id');//will remove primary constrain
     $table->unsignedInteger('revision') //add revision column
     $table->primary( array( 'id', 'revision' ) );//make them both primary
     $table->increments('id')->change()//add the auto increment constrain back  
    

    【讨论】:

      猜你喜欢
      • 2022-11-01
      • 1970-01-01
      • 2020-07-18
      • 2011-09-02
      • 1970-01-01
      • 1970-01-01
      • 2013-03-01
      • 1970-01-01
      • 2019-06-16
      相关资源
      最近更新 更多