Я получаю следующую ошибку после попытки дважды вызвать firstOrCreate () в модели (ProductItem), представляющей схему с первичным ключом И уникальным ключом:
Illuminate \ Database \ QueryException с сообщением 'SQLSTATE [23000]: нарушение ограничения целостности: 1062 Повторяющаяся запись' 1000 'для ключа' product_items_item_ref_id_unique '(SQL: вставить в значения
product_items
(item_ref_id
,name
,updated_at
,created_at
) (1000,' Элемент 1 ', 2017-05-03 19:20:26, 2017-05-03 19:20:26))'
- При первом запуске я ожидал, что firstOrCreate () попытается получить элемент, в противном случае, если он не существует, он создает (вставляет) и возвращает новый. . ‹- вставляется успешно
- Если я запустил его второй раз, я предполагаю, что он должен вернуть существующий. ‹- здесь возникает ошибка
Перенос происходит следующим образом:
class CreateProductItemTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('product_items', function (Blueprint $table) {
$table->increments('id');
$table->integer('item_ref_id')->unique();
$table->string('name');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('product_items');
}
}
Код, использованный для создания предмета:
$product_item = App\ProductItem::firstOrCreate(['item_ref_id'=>1000,'name'=>'Item 1')] );
Я просмотрел следующие сообщения, ни один из которых не помог
firstOrCreate
выходит из поляid
. ЕСЛИ вы хотите, чтобыitem_ref_id
был вашим первичным ключом, определите его как первичный с указанным значением и удалите столбец приращений. Если вы хотите, чтобыitem_ref_id
был столбцом автоинкремента, измените идентификатор приращения и убедитесь, что в вашей модели установлен primaryKey. - person aynber   schedule 03.05.2017item_ref_id
был уникальным ключом, а не первичным, аid
был первичным ключом. - person user919426   schedule 03.05.2017'name' => 'Item1'
и оставите только идентификатор ссылки в качестве параметра поиска? - person Naltroc   schedule 03.05.2017