在不接触时间戳的情况下进行更新(Laravel)

2022-08-30 08:05:20

是否可以在不触及时间戳的情况下更新用户?

我不想完全禁用时间戳。

格茨


答案 1

暂时禁用它:

$user = User::find(1);
$user->timestamps = false;
$user->age = 72;
$user->save();

您可以选择在保存后重新启用它们。

这是仅拉拉维尔 4 和 5 的功能,不适用于拉拉维尔 3。


答案 2

在 Laravel 中,您可以将公共字段设置为如下所示:5.2$timestampsfalse

$user->timestamps = false;
$user->name = 'new name';
$user->save();

或者,您可以将选项作为函数的参数传递:save()

$user->name = 'new name';
$user->save(['timestamps' => false]);

为了更深入地了解它是如何工作的,你可以看看类,在方法中:\Illuminate\Database\Eloquent\ModelperformUpdate(Builder $query, array $options = [])

protected function performUpdate(Builder $query, array $options = [])
    // [...]

    // First we need to create a fresh query instance and touch the creation and
    // update timestamp on the model which are maintained by us for developer
    // convenience. Then we will just continue saving the model instances.
    if ($this->timestamps && Arr::get($options, 'timestamps', true)) {
        $this->updateTimestamps();
    }

    // [...]

仅当 public 属性等于或返回时,才会更新时间戳字段(如果数组不包含键,则默认更新时间戳字段)。timestampstrueArr::get($options, 'timestamps', true)true$optionstimestamps

一旦这两个中的一个返回,字段就不会更新。falsetimestamps


推荐