【问题标题】:Laravel auto-increment on non-primary fieldLaravel 在非主字段上自增
【发布时间】:2018-12-18 07:58:34
【问题描述】:

这是我的迁移。我希望 id 字段自动递增但不是主要字段。可能吗?此迁移引发异常Syntax error or access violation: 1075 Incorrect table definition; there can be only one auto column and it must be defined as a key

Schema::create('tests', function (Blueprint $table) {
    $table->increments('id');
    $table->unsignedInteger('project_id');
    $table->unsignedInteger('model_id'); 
    $table->timestamps();

    $table->dropPrimary('id');

    $table->foreign('project_id')
        ->references('id')
        ->on('projects')
        ->onDelete('cascade');

    $table->primary(['project_id', 'model_id']);
});

【问题讨论】:

    标签: laravel laravel-5.7


    【解决方案1】:

    这不是Laravel 错误。你不能在 mysql 表中有两个自动增量列。 (当然,如果您使用的是 mysql),但我认为没有任何关系数据库能够让您拥有两个自动递增列。

    但是还有另一种方法可以做到这一点。 看this问题

    【讨论】:

    • id 在我的情况下只是自动递增列
    • 我有同样的问题,id 应该是自动递增的列,但我想使用另一列作为主键。你找到解决办法了吗? @fiter
    • @siri 对不起,不
    【解决方案2】:

    这不是 Laravel 错误,而是 MySQL 错误。正如错误消息所说:it must be defined as a key。您正在删除 id 列上的 primaryKey 约束。您应该尝试将其设置为索引。

    尝试以下$table->unsignedInteger('id')->index()->autoIncrement();。这将使它成为一个 AI 整数和一个索引,但不是一个 PK。

    【讨论】:

    • 不幸的是,在这种情况下我遇到了一个错误:Syntax error or access violation: 1068 Multiple primary key defined (SQL: alter table 'tests' add primary key 'tests_project_id_model_id_primary'('project_id', 'model_id'))
    猜你喜欢
    • 2016-06-04
    • 2011-10-22
    • 2020-07-18
    • 2011-03-14
    • 2011-09-02
    • 2020-10-22
    • 2014-12-28
    • 1970-01-01
    • 2022-11-01
    相关资源
    最近更新 更多