Intereting Posts
Как получить данные из списка выпадающего списка в таблицу? Altorouter не может выполнять маршруты Yii2 – Вызов команды консоли Yii из другой команды консоли? Образцы инъекций зависимостей кажутся экстремальными в классе управления PHP читает десятичные целые числа из атрибутов xml json_encode () в цикле while для mySQL для календаря Вычитание дней, месяцев или лет с даты с использованием php Как исправить это незаконное смещение строк? Ошибка API Vimeo 708 Рекомендации по отображению результатов поиска с соответствующими фрагментами текста из фактического результата Почему возможно переопределить переменные экземпляра в PHP, но не в Java? Кодирование байтовых данных на цифры как запустить php-файл в netbeans Ajax – наилучшая практика / подход для загрузки третичных данных Неустранимая ошибка: имя функции должно быть строкой в ​​/home/User/public_html/website/index.php в строке 7

Laravel 5: Нарушение ограничения целостности: 1062 – Многим многим

Мне нужно несколько советов по следующему.

У меня 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]: нарушение ограничений целостности: 1062 Дублирует запись «1-1» для ключа «PRIMARY» (SQL: insert into document_plate ( created_at , document_id , plate_id , updated_at )

Теперь вопрос

Есть ли способ избежать ошибок и просто обновить таблицу с теми же ids ?

Или .. Мне нужно настроить какую-то проверку на интерфейсе, которая сообщает пользователю (перед отправкой), что он / она выбирает те же id's которые уже находятся в таблице.

Примечание. Я использую AngularJS для операций с интерфейсом.

Laravel делает это очень просто, используя метод sync . По умолчанию метод sync отключит любые идентификаторы, которые вы не передадите ему, но он принимает второй аргумент, который может отключить отключение.

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

Это добавит только запись, если она еще не существует в таблице.

Ссылка на API: http://laravel.com/api/5.1/Illuminate/Database/Eloquent/Relations/BelongsToMany.html#method_sync