在尝试对模型(ProductItem)调用firstOrCreate()两次后,出现以下错误,该模型表示具有主键和唯一键的架构:
用消息“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')] );
我浏览了以下几篇文章,没有一篇对我有帮助
laravel first0rNew Integrity Constraint Violation
Laravel 5 Integrity constraint violation
Laravel - Integrity constraint violation: 1062 Duplicate entry
最佳答案
我相信你有语法问题。documentation将语法描述为:
$flight = App\Flight::firstOrCreate(
['name' => 'Flight 10'], ['delayed' => 1]
);
请注意,字段位于不同的数组中,而不是位于同一数组中的两个元素中。试试看。所以对你来说是:
$product_item = App\ProductItem::firstOrCreate(['item_ref_id'=>1000], ['name'=>'Item 1')] );
关于php - 违反完整性约束firstOrCreate(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43767455/