【发布时间】:2020-03-28 23:09:52
【问题描述】:
在 Laravel 中,我有一个仅创建但未更新的模型。所以,我只想删除 updated_at 字段。但created_at 字段是必需的。
那么我怎样才能在保留created_at 字段的同时只删除updated_at 字段?
【问题讨论】:
标签: php laravel eloquent timestamp
在 Laravel 中,我有一个仅创建但未更新的模型。所以,我只想删除 updated_at 字段。但created_at 字段是必需的。
那么我怎样才能在保留created_at 字段的同时只删除updated_at 字段?
【问题讨论】:
标签: php laravel eloquent timestamp
在您的模型中添加以下两行:
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
【讨论】:
将下面的行添加到您的模型中。这适用于插入和选择查询。
public $timestamps = false;
如果您也不需要创建列,请删除数据库/迁移文件中以下行。
$table->timestamps();
【讨论】:
created_at,但不需要updated_at,您还没有提供解决方案。您的解决方案会导致同时删除 created_at 和 updated_at。
您作为解决方案检查的答案不是问题所要求的。
您可以在表创建迁移中删除updated_at 列:
Schema::create('sample', function (Blueprint $table)
$table->id();
$table->timestamps();
$table->dropColumn('updated_at');
});
【讨论】:
updated_at,它在timestamps() 中带有created_at。 jignesh Joisar 的答案是 ORM 的正确解决方案。我的 google 搜索迁移将我带到了这篇文章,所以我让这个答案留在这里也许它可以帮助某人。
$table->timestamp('created_at')->nullable(); 替换 $table->dropColumn('update_at') 和 $table->timestamps() 行,因为只添加一列而不是添加两列并删除一列更合适。
如果您查看 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;
}
【讨论】: