【问题标题】:How to remove "updated_at" while keeping the "created_at" in Eloquent ORM Laravel如何在 Eloquent ORM Laravel 中保留“created_at”的同时删除“updated_at”
【发布时间】:2020-03-28 23:09:52
【问题描述】:

在 Laravel 中,我有一个仅创建但未更新的模型。所以,我只想删除 updated_at 字段。但created_at 字段是必需的。

那么我怎样才能在保留created_at 字段的同时只删除updated_at 字段?

【问题讨论】:

    标签: php laravel eloquent timestamp


    【解决方案1】:

    在您的模型中添加以下两行:

    public $timestamps = ["created_at"]; //only want to used created_at column
    const UPDATED_AT = null; //and updated by default null set
    

    第二种方式:

    public $timestamps = false; //by default timestamp true
    

    添加这样的功能:

    public function setCreatedAtAttribute($value) { 
        $this->attributes['created_at'] = \Carbon\Carbon::now(); 
    }
    

    更多关于 laravel 时间戳的信息see

    【讨论】:

    【解决方案2】:

    将下面的行添加到您的模型中。这适用于插入和选择查询。

    public $timestamps = false;
    

    如果您也不需要创建列,请删除数据库/迁移文件中以下行。

    $table->timestamps();
    

    【讨论】:

    • 我想要created_at,但不需要updated_at,您还没有提供解决方案。您的解决方案会导致同时删除 created_atupdated_at
    【解决方案3】:

    您作为解决方案检查的答案不是问题所要求的。

    您可以在表创建迁移中删除updated_at 列:

    Schema::create('sample', function (Blueprint $table)    
        $table->id();
        $table->timestamps();
        $table->dropColumn('updated_at');
    });
    

    【讨论】:

    • 您发布的答案根本不是我的问题的答案。我没有问移民。问题是关于雄辩的 ORM。现在谈到您的回答,我想在这里补充一下,您首先添加了 updated_at 然后删除了该列。一开始不加会不会更好?
    • @Blip Yeap,你是对的,我认为你的问题是关于迁移的。问题是你不能只在迁移中使用updated_at,它在timestamps() 中带有created_at。 jignesh Joisar 的答案是 ORM 的正确解决方案。我的 google 搜索迁移将我带到了这篇文章,所以我让这个答案留在这里也许它可以帮助某人。
    • 我同意你的看法。但我的建议是你应该用一行 $table->timestamp('created_at')->nullable(); 替换 $table->dropColumn('update_at')$table->timestamps() 行,因为只添加一列而不是添加两列并删除一列更合适。
    【解决方案4】:

    如果您查看 trait Illuminate\Database\Eloquent\Concerns\HasTimestamps 内部,您会发现很多选项。

    我最喜欢的是像这样在你的模型上设置一个常数。

    const UPDATED_AT = null;
    

    但是你也可以覆盖一个像这样设置 updated_at 字段的函数

    public function setUpdatedAt($value): self
    {
        // Do nothing.
        return $this;
    }
    

    或者,您可以像这样覆盖另一个函数

    public function getUpdatedAtColumn()
    {
        return null;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 1970-01-01
      • 1970-01-01
      • 2020-04-08
      • 2016-08-28
      • 2019-01-22
      • 2016-06-22
      相关资源
      最近更新 更多