如果选择时不存在,则在 Eloquent 数据库中创建记录
Create a Record in Eloquent database if it's not existing when selecting
我创建了一个模型等等,现在我使用该代码获取数据:
$all_keys = MemberAux::select('apikey','apisecret')->where('user_id', $user_id)->first();
table基本上只有一个自增id,一个user_id,和两个数据字段。
我输出它们或用
更新它们
$all_keys->apikey = $apikey_new;
$all_keys->apisecret = $apisecret_new;
$all_keys->save();
效果很好。但是当记录尚不存在时,我会收到错误消息。现在我读到了 firstOrCreate
方法,但我是一个初学者,我什至不知道我必须把它写在 select "string" 的什么地方。我找到的答案和解决方案意味着我还没有知识。
顺便说一句:我正在使用使用 Slim 框架的 Userfrosting,Laravel 和 Eloquent。
偷懒的方法:
$all_keys = MemberAux::select('apikey','apisecret')->where('user_id', $user_id)->first();
if(!$all_keys){
$all_keys = new MemberAux();
}
// rest of your code
$all_keys->save();
我认为您正在寻找的方式:
$all_keys = MemberAux::firstOrCreate(['user_id' => $user_id]);
// rest of your code
$all_keys->save();
请注意,您可能必须在模型中设置可填写字段。
$all_keys = MemberAux::firstOrCreate(
[
'user_id' => $user_id
],
[
'apikey' => $apikey_new,
'apisecret' => $apisecret_new
]);
在此代码块中,firstOrCreate 中的第一个数组执行 where 查询以查看 user_id 是否存在。如果找到,则 returns 来自数据库的记录否则使用数组、第一个参数和第二个参数创建新记录。
但在您的情况下,您应该使用 updateOrCreate,因为您正在获取记录并更新它。
$all_keys = MemberAux::updateOrCreate(
[
'user_id' => $user_id
],
[
'apikey' => $apikey_new,
'apisecret' => $apisecret_new
]);
背后的逻辑与 firstOrCreate 相同,但在 updateOrCreate 中,您的数据库记录也将更新为第二个参数(数组)中提供的值
我创建了一个模型等等,现在我使用该代码获取数据:
$all_keys = MemberAux::select('apikey','apisecret')->where('user_id', $user_id)->first();
table基本上只有一个自增id,一个user_id,和两个数据字段。 我输出它们或用
更新它们$all_keys->apikey = $apikey_new;
$all_keys->apisecret = $apisecret_new;
$all_keys->save();
效果很好。但是当记录尚不存在时,我会收到错误消息。现在我读到了 firstOrCreate
方法,但我是一个初学者,我什至不知道我必须把它写在 select "string" 的什么地方。我找到的答案和解决方案意味着我还没有知识。
顺便说一句:我正在使用使用 Slim 框架的 Userfrosting,Laravel 和 Eloquent。
偷懒的方法:
$all_keys = MemberAux::select('apikey','apisecret')->where('user_id', $user_id)->first();
if(!$all_keys){
$all_keys = new MemberAux();
}
// rest of your code
$all_keys->save();
我认为您正在寻找的方式:
$all_keys = MemberAux::firstOrCreate(['user_id' => $user_id]);
// rest of your code
$all_keys->save();
请注意,您可能必须在模型中设置可填写字段。
$all_keys = MemberAux::firstOrCreate(
[
'user_id' => $user_id
],
[
'apikey' => $apikey_new,
'apisecret' => $apisecret_new
]);
在此代码块中,firstOrCreate 中的第一个数组执行 where 查询以查看 user_id 是否存在。如果找到,则 returns 来自数据库的记录否则使用数组、第一个参数和第二个参数创建新记录。
但在您的情况下,您应该使用 updateOrCreate,因为您正在获取记录并更新它。
$all_keys = MemberAux::updateOrCreate(
[
'user_id' => $user_id
],
[
'apikey' => $apikey_new,
'apisecret' => $apisecret_new
]);
背后的逻辑与 firstOrCreate 相同,但在 updateOrCreate 中,您的数据库记录也将更新为第二个参数(数组)中提供的值