gpt4 book ai didi

php - Laravel 5 : Integrity constraint violation: 1062 - Many to Many

转载 作者:行者123 更新时间:2023-12-02 06:54:44 25 4
gpt4 key购买 nike

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

我有 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();
});

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

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

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

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-1' for key 'PRIMARY' (SQL: insert into document_plate (created_at, document_id, plate_id, updated_at)

现在是问题

有没有办法避免出错,只用相同的 ids 更新表?

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

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

最佳答案

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

关于php - Laravel 5 : Integrity constraint violation: 1062 - Many to Many,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34022415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com