当前位置:  开发笔记 > 编程语言 > 正文

Laravel 5:完整性约束违规:1062 - 多对多

如何解决《Laravel5:完整性约束违规:1062-多对多》经验,为你挑选了1个好方法。

我需要一些关于以下方面的建议.

我有2次迁移,就像这样.

        Schema::create('plates', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('serial_number');
        $table->string('crc-code', 50);
        $table->string('reason', 50)->nullable();

        $table->softDeletes();

        $table->timestamps();
    });

而另一个

  Schema::create('documents', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name', 25)->unique();
        $table->text('description')->nullable();
        $table->longText('relative_path');

我设置的多对多关系的数据透视表就像这样

        Schema::create('document_plate', function (Blueprint $table) {
      $table->integer('plate_id')->unsigned()->index();
      $table->integer('document_id')->unsigned()->index();

      $table->primary(['plate_id', 'document_id']);

      $table->timestamps();
    });

采取某种行动时,我使用下面的代码将a附加plate到adocument

       $plate  =   Plate::find(1);
       $doc    =   Document::find(1);
       if($plate && $doc) {
          $plate->documents()->attach($doc->id);
       }

第一次,一切正常!将document_plate得到更新.ids再次执行相同操作时会发生错误.

SQLSTATE [23000]:完整性约束违规:1062重复条目'1-1'的关键'主要'(SQL:插入document_plate(created_at,document_id,plate_id,updated_at)

现在的问题

有没有办法避免错误,只是用同样的方法更新表ids

或者..我需要在前端设置某种验证,告诉用户(在提交之前)他/她选择id's已经在表中的相同内容.

注意:我使用AngularJS进行前端操作.



1> Thomas Kim..:

Laravel通过使用该sync方法使这非常简单.sync默认情况下,该方法将分离您未传递给它的任何ID,但它接受可以禁用分离的第二个参数.

$plate->documents()->sync([$doc->id], false);

如果表中尚不存在该条目,则仅添加该条目.

链接到API:http://laravel.com/api/5.1/Illuminate/Database/Eloquent/Relations/BelongsToMany.html#method_sync

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有