【问题标题】:Create a Record in Eloquent database if it's not existing when selecting如果选择时不存在,则在 Eloquent 数据库中创建记录
【发布时间】:2020-03-30 05:06:36
【问题描述】:

我创建了一个模型等,现在我使用该代码获取我的数据:

 $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 方法,但我是一个初学者,我什至不知道我必须在我的选择“字符串”中将它写在哪里。我找到的答案和解决方案暗示我还没有知识。

顺便说一句:我正在使用使用 Slim 框架、Laravel 和 Eloquent 的 Userfrosting。

【问题讨论】:

  • $all_keys = MemberAux::firstOrCreate(['user_id' => $user_id]);
  • 因为您之后要更新数据,所以您应该使用 updateOrCreate 方法而不是 firstOrCreate

标签: database laravel eloquent userfrosting


【解决方案1】:
 $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 中,您的数据库记录也将更新为第二个参数(数组)中提供的值

【讨论】:

  • 附带说明,只需确保这些字段在模型上是“可填充的”
【解决方案2】:

懒惰的方式:

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

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

【讨论】:

    猜你喜欢
    • 2016-10-29
    • 2016-01-13
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 2017-03-13
    • 2020-05-23
    相关资源
    最近更新 更多