自增的时候,如何不更新 updated_at 字段

自增的时候,我数据库没有updated_at字段,当时每次更新数据,这个字段都是默认被更新的。虽然我重写了更新的方法了。
这是我的控制器的代码:

        // 更新请柬查看的人数
        WebInvitation::find($invitation->id)->increment('view_time');

下面是模型的中的配置代码:

namespace App\Models;
use Illuminate\Database\Eloquent\Model;

class WebInvitation extends Model
{
    /**
     * 不可被批量赋值的属性。
     *
     * @var array
     */
    protected $guarded = ['updated_at'];

    // 重写setUpdatedAt方法 就是想关闭自动更新时间的方法
    public function setUpdatedAtAttribute($value) {
        // Do nothing.
    }
}

不知道为何?难道必须要增加一个地段记录时间吗?

附言 1  ·  2年前

可以在laravel框架可以直接在模型中设置UPDATED_AT为空,来限制他的更新。

const UPDATED_AT = null;
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

在你的模型中填写下列方法

    public function getUpdatedAtColumn() {
        return null;
    }

可以使用这种方式,不触发获取update_at字段

4年前 评论
讨论数量: 13

我也正遇到此类问题,请问怎么解决的呢

4年前 评论
Dennis_Ritchie

覆盖usesTimestamps方法,或者是 $this->timestamps;

/**
     * Determine if the model uses timestamps.
     *
     * @return bool
     */
    public function usesTimestamps()
    {
        return $this->timestamps;
    }
4年前 评论

@13249808562 覆盖了的话,其他save操作,不就不自动更新updated_at字段了吗

4年前 评论

你试试这样

// 更新请柬查看的人数
$web_invitaion = WebInvitation::find($invitation->id);
$web_invitaion->increment('view_time', 1, ['updated_at' => $web_invitaion->updated_at]);
4年前 评论
Dennis_Ritchie
trait  UpdateWithoutChangeUpdatedField
{
    protected $needUpdateAt = true;

    public function needUpdate($value)
    {
        $this->needUpdateAt = $value;
        return $this;
    }

    /**
     * Set the value of the "updated at" attribute.
     *
     * @param  mixed $value
     * @return $this
     */
    public function setUpdatedAt($value)
    {
        if ($this->needUpdateAt) {
            parent::setUpdatedAt($value);
        }
        return $this;
    }
}

trait的使用方法就不用多说了吧,$model->needUpdate(false)->increment('count');

4年前 评论
kevin1999 3年前

如何自动维护除了时间自动?比如操作用户ID 字段?有自定义这种写法吗?

4年前 评论
Dennis_Ritchie

@609468798 你说的是啥意思?

4年前 评论

@Dennis_Ritchie 已经找到解决办法了。就是创建和更新的时候 我有一个操作者ID需要自动维护。就是类似着两个时间字段差不多。要不每个数据都要带上操作者ID。这样统一自动处理就可以了

4年前 评论

在你的模型中填写下列方法

    public function getUpdatedAtColumn() {
        return null;
    }

可以使用这种方式,不触发获取update_at字段

4年前 评论

直接把时间戳给false就行

$user= User::find($id);
$user->timestamps = false;
$user->increment('prise');
3年前 评论

@此时此刻 经过测试新版的laravel确实无效。 可以使用与以下的办法阻止对更新字段的修改

    const UPDATED_AT = null;

完整模型如下:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use HasFactory;

    const UPDATED_AT = null;
}
2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!