gpt4 book ai didi

Laravel Eloquent 增量不更新时间戳

转载 作者:行者123 更新时间:2023-12-05 08:20:16 24 4
gpt4 key购买 nike

我有一个 Eloquent 模型,我想在该模型上增加一个属性。到目前为止,我一直在使用以下代码行来实现这一点:

Thread::where('id', $threadId)->increment('like_count');

然而,这具有更新 updated_at 时间戳的不良副作用。我发现了以下在不更改时间戳的情况下更新记录的方法:

    $thread = Thread::where('id', $threadId)->first();

$thread->timestamps = false;
$thread->like_count++;
$thread->save();

但这突然看起来不那么简洁了。因此,我想知道有一种方法可以在不更新时间戳的情况下使用 increment 方法。

最佳答案

如果您根本不需要时间戳,您可以使用以下方法为该特定模型一次性禁用它:

public $timestamps = false; 在您的模型中。这将添加额外的步骤,无论何时您想要更新时间戳,您都需要手动为它们分配值,如 $object->created_at = Carbon::now()

其次,如果您希望针对特定查询禁用那些,那么正如您在问题中提到的那样,这是一种方法。

另一种方法是使用查询生成器。现在时间戳是与 Eloquent 相关的功能。但是,如果您使用简单的查询构建器进行更新,它不会自行更新时间戳。

所以你可以这样做:

DB::table('threads')
->where('id', $threadId)
->update([ 'votes' => DB::raw('votes + 1') ]);

但是,如果可以选择的话,我个人更喜欢使用 Eloquent 方式。

更新

您现在可以将附加参数传递给 increment 函数以指定您要更新的其他列。

所以这将变成:

$thread = Thread::find($threadId);

$thread->increment('votes', 1, [
'updated_at' => $thread->updated_at
]);

关于Laravel Eloquent 增量不更新时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54870792/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com