【发布时间】:2021-07-31 12:18:54
【问题描述】:
我在下面有这些代码,似乎一切正常,但是当我尝试运行单元测试时,它在下面返回错误。
这是我的播种机(这个播种机在不同的测试用例中被多次调用):
DB::table('sizes')->upsert([
[
'name' => 'jumbo',
'created_at' => date("Y-m-d H:i:s"),
'updated_at' => date("Y-m-d H:i:s"),
],
[
'name' => 'large',
'created_at' => date("Y-m-d H:i:s"),
'updated_at' => date("Y-m-d H:i:s"),
]
], ['id'], ['name']);
然后错误弹出:
Illuminate\Database\QueryException:SQLSTATE[23000]:完整性约束违规:19 UNIQUE 约束失败:sizes.name(SQL:插入“sizes”(“created_at”、“name”、“updated_at”)值(2021 -05-10 12:52:18, 巨型, 2021-05-10 12:52:18), (2021-05-10 12:52:18, large, 2021-05-10 12:52:18) on冲突(“id”)做更新集“名称”=“排除”。“名称”)
这里是迁移:
Schema::create('sizes', function (Blueprint $table) {
$table->id();
$table->string('name')
->unique();
$table->timestamps();
});
【问题讨论】:
-
请显示您的架构
-
@ThaiNguyenHung 更新描述
-
在您的 upsert 查询中,“name”是唯一字段而不是“id”,在您的 upsert 查询旁边不更新任何字段,因此您可以删除第三个参数 DB::table('sizes')- > ->upsert([ [ 'name' => 'jumbo', 'created_at' => date("Ymd H:i:s"), 'updated_at' => date("Ymd H:i:s"), ], [ 'name' => 'large', 'created_at' => date("Ymd H:i:s"), 'updated_at' => date("Ymd H:i:s"), ] ], [ '名称']);