【问题标题】:firstOrNew with "or" statementfirstOrNew 带有“或”语句
【发布时间】:2022-01-05 01:00:09
【问题描述】:

我有一个表,其中包含“name”、“surname”、“user_id”等列,我需要先通过 id 检查条目是否存在,然后通过 name 和 surname 一起检查,如果没有,则创建它。我如何巧妙地做到这一点,而不是制作两个更新语句,如果两个都返回 0 就创建一个新的(看起来太笨重)

我想用firstOrNew,但似乎只有在匹配所有参数的情况下才能工作。 有没有什么方法可以很好地适用于我的情况?

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    你可以尝试这样的事情(假设你想创建一个模型[保存到数据库]):

    $attributes = [
        'name' => ...,
        'surname' => ...,
    ];
    
    $model = Model::where('id', $id)
        ->orWhere(fn ($q) => $q->where($attributes))
        ->firstOr(fn () => Model::create($attributes));
    

    这将通过 id OR name 和 surname 搜索记录。如果没有找到,它将创建一个包含姓名和姓氏的新记录(假设这些属性可以在模型上填写)。

    Laravel 8.x Docs - Eloquent - Retrieving Single Models / AggregatesfirstOr

    【讨论】:

    • 谢谢!这正是我一直在寻找的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 2013-10-07
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多