在尝试对模型(ProductItem)调用firstOrCreate()两次后,出现以下错误,该模型表示具有主键和唯一键的架构:
用消息“SQLSTATE[23000]照亮\数据库\查询异常:
完整性约束冲突:1062键的重复项“1000”
“product_items_item_ref_id_unique”(SQL:插入到product_items
item_ref_idnameupdated_atcreated_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/

10-12 06:26