我有这样的表| user_id | code | created_at | updated_at |
。
我想创建一个方法,为特定用户创建一个新的代码(如果它不存在):
public function createCode(Request $request)
{
$request->user()->confirmationCode()->updateOrCreate([
'user_id' => $request->user()->id,
'code' => bin2hex(random_bytes(3)),
]);
}
User
型号:
public function confirmationCode()
{
return $this->hasOne(ConfirmationCode::class);
}
但是createCode()
总是为用户创建一个新的代码,即使user_id
的代码已经存在。怎么了?
答案 0 :(得分:1)
您的updateOrCreate语法不正确。目前要更新它必须匹配您的两个输入。您需要以下内容:
public function createCode(Request $request)
{
$request->user()->confirmationCode()->updateOrCreate(
['user_id' => $request->user()->id],
['code' => bin2hex(random_bytes(3))]
);
}
该函数匹配第一个输入数组,然后如果找到则使用第二个数组中的值进行更新。如果匹配失败,它将使用两个数组中的值创建一个新记录。
https://laravel.com/docs/5.5/eloquent#other-creation-methods