📜  laravel 中的时间戳为 false - PHP (1)

📅  最后修改于: 2023-12-03 15:17:13.434000             🧑  作者: Mango

Laravel中的时间戳为false - PHP

在Laravel中,当我们定义一个模型时,有一个选项可以设置时间戳是否要自动维护。这个选项就是“$timestamps”,默认情况下为true,表示需要自动维护时间戳。但是,当我们将时间戳设置为false时,时会发生什么呢?这篇文章将会告诉你这个问题的答案。

开启$timestamps

首先,我们来看一下开启$timestamps的情况下,Laravel是如何自动更新时间戳的。我们以一个简单的模型为例:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $table = 'posts';
    protected $fillable = ['title', 'content'];
}

对于这个模型,我们可以发现,表中会自动维护created_at和updated_at两个字段。在创建新记录时,Laravel将自动为这两个字段设置当前时间。在更新记录时,Laravel也会自动更新updated_at字段。

现在,我们来试着往数据库中插入一条数据,并查看插入后的数据。我们可以使用下面的代码:

$post = new Post;
$post->title = 'Hello Laravel';
$post->content = 'This is a Laravel tutorial';
$post->save();

我们可以看到,数据被正确插入到了数据库中,并且自动添加了created_at和updated_at字段,值均为当前时间。

关闭$timestamps

接下来,我们来看一下关闭$timestamps选项后,Laravel会发生什么。我们只需在模型中添加一行代码:

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $table = 'posts';
    protected $fillable = ['title', 'content'];
    public $timestamps = false;
}

现在,我们再次插入一条数据。这一次,我们可以发现,created_at和updated_at两个字段均为null。这就是关闭时间戳选项后的表现。也就是说,Laravel不再自动维护这两个字段。

手动维护时间戳

如果我们希望手动维护这两个字段,而不是让Laravel自动维护,那该怎么做呢?我们可以使用下面的代码:

$post = new Post;
$post->title = 'Hello Laravel';
$post->content = 'This is a Laravel tutorial';
$post->created_at = now();
$post->updated_at = now();
$post->save();

在这个例子中,我们手动设置了created_at和updated_at字段,值为当前时间。这样,我们就可以手动维护这两个字段了。

总结

通过这篇文章,我们学习了如何在Laravel中关闭时间戳选项。关闭时间戳选项后,Laravel将不再自动维护created_at和updated_at字段。如果我们需要手动维护这两个字段,我们可以使用now()函数手动设置这两个字段。