Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel:防止在创建记录时填充更新的\u at_Php_Laravel_Eloquent - Fatal编程技术网

Php Laravel:防止在创建记录时填充更新的\u at

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进行排序时,未修改的记录将被放置在修改的记

在Laravel>=5.8的最新版本中,我注意到,当您创建一个新的模型记录时,表中的
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字段的情况。