【问题标题】:laravel migration use auto increment when its not primarylaravel 迁移在不是主要的时候使用自动增量
【发布时间】:2017-10-14 19:57:37
【问题描述】:

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

 SQLSTATE[42000]: Syntax error or access violation: 1075 Incorrect table definition; there can be only one auto column and it must be defined as a key

到目前为止,我已经做到了

 public function up()
    {
        Schema::create('tagtables', function (Blueprint $table) {
            
            $table->integer('media_id');
            $table->integer('user_id');
            $table->boolean('approved')->default(false);
            $table->increments('inc')->unsigned();
            $table->timestamps();
            $table->dropPrimary('tagtables_inc_primary');
            $table->primary(array('user_id','media_id'));
                        
            // $table->foreign('media_id')->references('id')->on('media')->onUpdate('cascade')->onDelete('cascade');
            // $table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
        });


        // Schema::table('tagtables', function (Blueprint $table) {
        //     //$table->increments('id');
        //     $table->primary(array('user_id','media_id'));
        //     $table->foreign('media_id')->references('id')->on('media')->onUpdate('cascade')->onDelete('cascade');
        //     $table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
            
        // });
    }

【问题讨论】:

  • 你不需要将它们设为主键,而它们是外键

标签: laravel laravel-eloquent laravel-query-builder laravel-migrations laravel-schema-builder


【解决方案1】:

我认为你需要这个:

public function up()
{
    Schema::create('tagtables', function (Blueprint $table) {
        $table->increments('inc');
        $table->integer('media_id')->unsigned();
        $table->integer('user_id')->unsigned();
        $table->boolean('approved')->default(false);
        $table->timestamps();

        $table->index(['user_id', 'media_id']);
        $table->foreign('media_id')->references('id')->on('media')->onUpdate('cascade')->onDelete('cascade');
        $table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
    });
}

并将其放入模型中:

protected $primaryKey = 'inc';

【讨论】:

  • 我收到另一个错误 [Illuminate\Database\QueryException] SQLSTATE[42000]:语法错误或访问冲突:1068 定义了多个主键(SQL:alter table tagtables add primary key tagtables_user_id_media_id_primary( user_id, media_id))
  • 对不起,我只是从您的帖子中复制其余代码。将$table->primary(['user_id', 'media_id']); 更改为$table->index(['user_id', 'media_id']);
【解决方案2】:

我找到了问题的解决方案,即在创建架构后定义该列 inc(自动递增)。

应该是这样的

public function up()
    {
        Schema::create('tagtables', function (Blueprint $table) {
            
            $table->integer('media_id');
            $table->integer('user_id');
            $table->boolean('approved')->default(false);
           // $table->increments('inc');
            $table->timestamps();
          //  $table->dropPrimary( 'tagtables_inc_primary' );
            $table->primary(array('user_id','media_id'));
                        
            // $table->foreign('media_id')->references('id')->on('media')->onUpdate('cascade')->onDelete('cascade');
            // $table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
        });

    DB::statement('ALTER Table tagtables add id INTEGER NOT NULL UNIQUE AUTO_INCREMENT;');
        // Schema::table('tagtables', function (Blueprint $table) {
        //     //$table->increments('id');
        //     $table->primary(array('user_id','media_id'));
        //     $table->foreign('media_id')->references('id')->on('media')->onUpdate('cascade')->onDelete('cascade');
        //     $table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
            
        // });
    }

化学

【讨论】:

    猜你喜欢
    • 2017-05-11
    • 2022-11-01
    • 2019-06-16
    • 2014-12-28
    • 2017-06-17
    • 2020-01-29
    • 2017-05-13
    • 2017-11-11
    • 1970-01-01
    相关资源
    最近更新 更多