使用 "or" 语句的 firstOrNew

firstOrNew with "or" statement

我有一个 table,其中包含“姓名”、“姓氏”、“user_id”等列,我需要先通过 ID 检查条目是否存在,然后通过姓名和姓氏检查条目是否存在在一起,如果有none,就创建它。我如何巧妙地做到这一点,而不是制作两个更新语句,如果两个 return 0 只是创建一个新的(看起来太笨重)

我想过用firstOrNew,但是好像只有匹配所有的参数才行。 有没有我遗漏的适合我的情况的方法?

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

$attributes = [
    'name' => ...,
    'surname' => ...,
];

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

这将按 ID 或姓名和姓氏搜索记录。如果找不到,它将创建一个包含名称和姓氏的新记录(假设这些属性可在模型上填写)。

Laravel 8.x Docs - Eloquent - Retrieving Single Models / Aggregates firstOr