如果选择时不存在在口才数据库中创建记录

时间:2019-12-05 09:44:53

标签: database laravel eloquent userfrosting

我创建了一个模型,依此类推,现在我用该代码获取数据:

 $all_keys = MemberAux::select('apikey','apisecret')->where('user_id', $user_id)->first();

该表基本上只有一个自动增量ID,一个user_id和两个数据字段。 我输出它们或用

更新它们
$all_keys->apikey = $apikey_new;
$all_keys->apisecret = $apisecret_new;
$all_keys->save();

效果很好。但是当一条记录还不存在时,我会收到错误消息。现在,我了解了firstOrCreate方法,但是我是一个初学者,我什至不知道我必须在选择的“字符串”中将其写入何处。我发现的答案和解决方案意味着我还没有知识。

顺便说一句:我正在使用Userfrosting,它使用了Slim Framework,Laravel和Eloquent。

2 个答案:

答案 0 :(得分:4)

 $all_keys = MemberAux::firstOrCreate(
            [
                'user_id' => $user_id
            ],
            [
                'apikey'    => $apikey_new,
                'apisecret' => $apisecret_new
            ]);

在此代码块中,firstOrCreate内的第一个数组执行where查询,以查看user_id是否存在。如果找到,则从数据库返回该记录,否则使用数组,第一个参数和第二个参数创建新记录。

但是在您的情况下,由于您要获取记录并对其进行更新,因此应使用updateOrCreate

$all_keys = MemberAux::updateOrCreate(
        [
            'user_id' => $user_id
        ],
        [
            'apikey'    => $apikey_new,
            'apisecret' => $apisecret_new
        ]);

后面的逻辑与firstOrCreate相同,但是在updateOrCreate中,您的数据库记录也将更新为第二个参数(数组)中提供的值

答案 1 :(得分:1)

懒惰的方式:

$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();

请注意,您可能必须在模型中设置可填充字段。