Php Laravel:防止在创建记录时填充更新的\u at
在Laravel>=5.8的最新版本中,我注意到,当您创建一个新的模型记录时,表中的Php Laravel:防止在创建记录时填充更新的\u at,php,laravel,eloquent,Php,Laravel,Eloquent,在Laravel>=5.8的最新版本中,我注意到,当您创建一个新的模型记录时,表中的updated\u列将自动填充与created\u相同的值。虽然在Model::create()上填写created\u在有意义,但在上填写updated\u又有什么意义呢?在我看来,让它保持在Laravel5.8之前的状态将更有意义 是否有一种已知的简单方法来禁用此新行为?我个人更喜欢在创建时将updated\u设置为当前时间戳的当前行为。这样,在通过updated\u进行排序时,未修改的记录将被放置在修改的记
updated\u列将自动填充与created\u相同的值。虽然在Model::create()
上填写created\u在
有意义,但在
上填写updated\u又有什么意义呢?在我看来,让它保持在Laravel5.8之前的状态将更有意义
是否有一种已知的简单方法来禁用此新行为?我个人更喜欢在创建时将updated\u设置为当前时间戳的当前行为。这样,在通过updated\u进行排序时,未修改的记录将被放置在修改的记录之间
如果updated_at
的初始值为null
,则它们将放在列表的开头或结尾。我不认为这是大多数人想要的
但是,您可以在模型的类中更改:
protected static function booted(): void
{
static::creating(function (self $model) {
$model->updated_at = null;
});
}
我个人更喜欢当前行为,将updated_at
设置为创建时的当前时间戳。这样,在通过updated\u进行排序时,未修改的记录将被放置在修改的记录之间
如果updated_at
的初始值为null
,则它们将放在列表的开头或结尾。我不认为这是大多数人想要的
但是,您可以在模型的类中更改:
protected static function booted(): void
{
static::creating(function (self $model) {
$model->updated_at = null;
});
}
从技术上讲,如果它是创建的,那么它也是最后一次更新模型。这是默认的Laravel行为。如果愿意,您可以禁用它并编写自己的模型创建/更新方法。但是,我会保留它,并质疑它为什么会导致您的逻辑/功能出现问题
//your model
public $timestamps = false;
// boot
static::creating( function ($model) {
$model->setCreatedAt($model->freshTimestamp());
});
//static::updating() .... and so on
从技术上讲,如果它是创建的,那么它也是最后一次更新模型。这是默认的Laravel行为。如果愿意,您可以禁用它并编写自己的模型创建/更新方法。但是,我会保留它,并质疑它为什么会导致您的逻辑/功能出现问题
//your model
public $timestamps = false;
// boot
static::creating( function ($model) {
$model->setCreatedAt($model->freshTimestamp());
});
//static::updating() .... and so on
如果已创建并更新==null,则表示该记录仅已创建而未更新。虽然我理解Laravel的逻辑,但我不认为必须在
处检索已创建的_和在
处检索已更新的_,以检查记录在创建后是否曾被触摸(这恰好是我的应用程序的情况)-这是数据浪费。我强烈建议他们关闭时间戳并使用//boot static方法来控制创建、更新等时创建的和更新的字段发生了什么。如果创建和更新的字段==null,则表示只创建了记录,而没有更新记录。虽然我理解Laravel的逻辑,但我不认为必须在
处检索已创建的_和在
处检索已更新的_,以检查记录在创建后是否曾被触摸(这恰好是我的应用程序的情况)-这是数据浪费。我强烈建议他们关闭时间戳并使用//boot static方法来控制创建、更新等时创建的\u at和更新的\u at字段的情况。