Laravel 在 created_at 等所有模型上添加列值的方法
Posted
技术标签:
【中文标题】Laravel 在 created_at 等所有模型上添加列值的方法【英文标题】:Laravel way to add a column value on all models like created_at 【发布时间】:2021-11-04 23:38:09 【问题描述】:我需要在我的一些数据库表中添加一列并将其填充到Model::create()
。
我想要的只是 timestamps
中内置的 Laravel 之类的功能,即 created_at
和 updated_at
我知道一些解决方案,但我想知道在这种情况下是否可以做其他事情。 例如:
protected static function booted()
static::created(function ($user)
//
);
或
class UserObserver
public function creating(User $user)
//
我需要对每个重复自己的模型都这样做。
我想到的另一个解决方案是创建一个BaseModel
,然后扩展它的所有内容。
我想做一些类似SoftDeletes
trait 的事情,在其中添加任何逻辑并使用我不知道的一些 laravel 钩子填充该列。如果有人可以指导我使用特征和如何完成这样的事情?
【问题讨论】:
【参考方案1】:您可以从一个基本模型类(一个小的重构)扩展您的所有模型,然后在该类中添加一个带有您的自定义逻辑的引导方法。
如果您在使用引导方法的模型(例如用户模型)中需要(或已经拥有)额外逻辑,您仍然可以保留它,但请确保调用 parent::booted();
class BaseModel extends Model
protected static function booted()
static::created(function ($model)
//logic
);
class User extends BaseModel
protected static function booted()
parent::booted();
//any other logic you may have/want in user
在我看来,这是最具可扩展性的方法。使用 OOP!您还可以在将来将此基类重用于其他全局逻辑。
【讨论】:
我知道这一点,并在我的问题中提到了这一点。我想要一些使用特征的方法,所以我不必更改所有模型。 向所有模型添加特征将是相同的工作量和基本相同的逻辑,您可以对特征执行相同操作,尽管只需覆盖特征中的引导方法并可选地调用如果您需要额外的自定义逻辑,则具有不同特征的新静态方法以上是关于Laravel 在 created_at 等所有模型上添加列值的方法的主要内容,如果未能解决你的问题,请参考以下文章
Laravel Eloquent 选择所有具有 max created_at 的行
如何在 Laravel 中更新 created_at 的列属性
如何在 laravel 5.4 中仅获取 created_at 日期而不是时间
Laravel / Moment - 如何确定夏令时期间是不是 created_at?