php Laravel在增加字段时禁用自动“updated_at”

gv8xihay  于 2023-03-16  发布在  PHP
关注(0)|答案(5)|浏览(233)

我正在递增表中的一些合计字段

$model->total_comments += 1;
$model->save();

然而,这会触发updated_at的日期更新。我想在这些情况下禁用它。我知道我可以手动完成,并完全禁用时间戳字段的自动更新。但希望有一个简单的方法来完成。
编辑:
从我的代码添加示例。注意,在这个模型上没有设置观察者。

namespace App\Models;

class Language extends \Illuminate\Database\Eloquent\Model
{

}

$router->get('/test', function () {
    $model = \App\Models\Language::find(1);

    $model->words_total = $model->words_total + 1;
    $model->save(['timestamps' => false]);

    return 'boo';
});
0vvn1miw

0vvn1miw1#

注意目前框架中有一个bug阻止了第一个解决方案的工作。如果它得到修复,我会保持这篇文章最新。Github issue

您可以将选项数组传递给save(),并禁用该次保存的时间戳:

$model->save(['timestamps' => false]);

当然,您也可以在模型上设置属性,但是如果您有可能继续使用同一个模型示例,则需要将其重新设置为true

$model->timestamps = false;
$model->save();
$model->timestamps = true;
bwleehnv

bwleehnv2#

您可以在保存前执行此操作,以暂时禁用时间戳。

$model->timestamps = false;
yzuktlbb

yzuktlbb3#

暂时禁用

$model->total_comments += 1;
$model->timestamps = false;
$model->save();
pgx2nnw8

pgx2nnw84#

溶液-1:

$model = Table::find($planId);
$model->timestamps = false;
$model->increment('popularity');
$model->save();

溶液-2:

DB::table('Table')
->where(‘id’, $planId)
->increment(‘popularity’,1)

有关详细信息https://medium.com/@panjeh/laravel-eloquent-model-increment-with-or-without-updating-timestamps-1274c6cd7f52

dced5bon

dced5bon5#

您可以在不更改created_atupdated_at时间戳的情况下更新记录,方法是保存这些列的当前值,例如updated_at

Model::where('id', $id)->update(['column' => "value", 'updated_at' => DB::raw('updated_at')]);

您也可以检查此线程Update without touching timestamps (Laravel)

相关问题