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);
}