Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel updateOrCreate with where子句_Laravel_Eloquent - Fatal编程技术网

Laravel updateOrCreate with where子句

Laravel updateOrCreate with where子句,laravel,eloquent,Laravel,Eloquent,如何使用where子句实现UPDATEORCEATE函数 比如说。我只想在某列包含特定值时更新字段,否则不更新。 是否可以使用updateOrCreate函数?据我所知,updateOrCreate不提供此功能。相反,您可以使用常规where子句,后跟update。从你的问题中,我发现你根本不需要创造 Something::where('column', 'value')->first()->update(['otherColumn' => 'some value']); u

如何使用where子句实现UPDATEORCEATE函数

比如说。我只想在某列包含特定值时更新字段,否则不更新。 是否可以使用updateOrCreate函数?

据我所知,updateOrCreate不提供此功能。相反,您可以使用常规where子句,后跟update。从你的问题中,我发现你根本不需要创造

Something::where('column', 'value')->first()->update(['otherColumn' => 'some value']);

updateOrCreate主要用于更新模型中的一列值。您不知道该行是否存在。如果该行存在,则只更新列值,否则将创建该行

updateOrCreate是一个带有where子句的更新:

$user = User::updateOrCreate(
    [
        'id'    => $userId,
        'type'  => $userType,
    ], 
    [
        'name'  => $userName,
        'email' => $userEmail,
    ]
);
如果存在具有匹配$userId和$userType的用户,则此查询将使用$userName和$userEmail更新该用户。如果找不到匹配的用户,将使用$userId、$userType、$userName和$userEmail创建一个新用户

因此,第一个数组是必须与更新匹配的where子句,第二个数组是在找到匹配项时应该更新的值,如果没有找到匹配项,则在创建新用户时使用两个数组的合并


如果您试图根据某些标准设置值,可以使用三元:

'user_id' => ($request->user_id && is_numeric($request->user_id) ? $request->user_id : \Auth::user()->id)
这相当于说,如果提供了user\u id且为数字,则将值设置为$request->user\u id,否则从经过身份验证的用户处获取user\u id,这是一个更简单的示例:

'user_id' => ($request->user_id ? $request->user_id : null)

如果请求中提供了用户id,请使用该值,否则,将值设置为null。

我正在使用create,以便如果为主键创建了一个新条目,它将在表中创建一个条目,否则它将更新该主字段的相应条目。我只希望在某列包含特定值时更新字段,否则不更新。您是说如果某些条件匹配,您希望更新,否则不更新。而updateOrCreate方法用于更新行(如果存在),否则创建新行。您到底想要什么?我只是想知道是否可以在更新之前检查一些条件。如果您只想在条件匹配时更新,如果条件不匹配时不创建新行,请使用where with update。请参阅以下两种情况-如果键不存在,我需要创建新行。若密钥已经存在,则检查该值是否符合某些条件,若符合,则更新或不更新。然后必须手动执行。updateOrCreate方法接受两个数组参数。第一个数组包含要检入数据库的键值,第二个数组包含要插入或更新的值。
'user_id' => ($request->user_id ? $request->user_id : null)