第一个或新与"or"声明



我有一个表,其中有类似于;name"姓"user_id";,我需要检查条目是否首先按id存在,然后按名称和姓氏一起存在,如果没有,请创建它。我如何巧妙地完成它,而不是做两个更新语句,如果两者都返回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-检索单个模型/聚合firstOr

最新更新