PHP:仅当存在替换时才更新字段。如果没有,保持不变
PHP: update fields ONLY if replacement is present. If not, remain untouched
我认为这是一个经典的,但在我的一个 Laravel 控制器中,只有在传入请求中存在相应的替换值时,我才需要更新某些字段的值。如果它们不存在,则必须保持不变。我的 "smartest" 到目前为止的尝试:
$user->name = $request->name ?: $user->name;
$user->email = $request->email ?: $user->email;
...
有没有使用最新的 PHP 或 Laravel 增强功能的更智能的方法?
提前致谢。
您可以在请求上使用get()
方法,并将当前值作为默认值传递。
$user->name = $request->get('name', $user->name);
您也可以使用三元运算符,只检查 $request->name 是否为 null 或空。
像这样:
$user->name = (($request->name === NULL) ? $user->name : $request->name);
通常在 Laravel 控制器 update
方法中,您将在 $request
中传递整个模型属性数组。您担心的是此数组中存在的 empty/null 值会自动将数据库列更新为 null。
别担心,sometimes
validation rule 是你的朋友。
public function update(Request $request, Model $model)
{
$validated = $request->validate([
'name' => 'sometimes|string',
'email' => 'sometimes|email',
// ...
]);
$model->update($validated);
}
我认为这是一个经典的,但在我的一个 Laravel 控制器中,只有在传入请求中存在相应的替换值时,我才需要更新某些字段的值。如果它们不存在,则必须保持不变。我的 "smartest" 到目前为止的尝试:
$user->name = $request->name ?: $user->name;
$user->email = $request->email ?: $user->email;
...
有没有使用最新的 PHP 或 Laravel 增强功能的更智能的方法? 提前致谢。
您可以在请求上使用get()
方法,并将当前值作为默认值传递。
$user->name = $request->get('name', $user->name);
您也可以使用三元运算符,只检查 $request->name 是否为 null 或空。
像这样:
$user->name = (($request->name === NULL) ? $user->name : $request->name);
通常在 Laravel 控制器 update
方法中,您将在 $request
中传递整个模型属性数组。您担心的是此数组中存在的 empty/null 值会自动将数据库列更新为 null。
别担心,sometimes
validation rule 是你的朋友。
public function update(Request $request, Model $model)
{
$validated = $request->validate([
'name' => 'sometimes|string',
'email' => 'sometimes|email',
// ...
]);
$model->update($validated);
}