📜  自定义时间戳列 laravel - PHP (1)

📅  最后修改于: 2023-12-03 14:57:07.951000             🧑  作者: Mango

自定义时间戳列 Laravel - PHP

在 Laravel 框架中,我们可以使用自定义时间戳列来管理模型的时间戳。默认情况下,Laravel 使用 "created_at" 和 "updated_at" 字段来记录模型的创建时间和更新时间。但是有时候我们需要在模型中使用不同的时间戳字段,例如 "published_at" 字段用于记录文章的发布时间。在本文中,我们将了解如何实现自定义时间戳列。

创建模型

首先,我们需要创建一个模型来展示自定义时间戳列的用法。假设我们有一个 Post 模型,该模型用于管理文章信息。我们将在模型中使用 "published_at" 字段来记录文章的发布时间。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $fillable = ['title', 'content', 'published_at'];
    
    protected $dates = ['published_at'];
    
    // ...
}

在上述代码中,我们指定了模型的 $fillable 数组,用于允许批量赋值的字段。同时,我们将 "published_at" 字段添加到 $dates 数组中,以便 Laravel 可以将其自动转换为 Carbon 实例,方便我们进行日期和时间的操作。

迁移文件

接下来,我们需要创建一个迁移文件来定义模型对应的数据表结构。在迁移文件中,我们可以指定自定义时间戳列的名称和类型。首先,我们运行以下 Artisan 命令来创建迁移文件:

php artisan make:migration create_posts_table --create=posts

然后,在生成的迁移文件中,我们可以使用 timestamp 方法来创建默认的时间戳列。然后,使用 renameColumn 方法来重命名默认的时间戳列为 "published_at":

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreatePostsTable extends Migration
{
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->text('content');
            $table->timestamps();
        });
        
        Schema::table('posts', function (Blueprint $table) {
            $table->renameColumn('created_at', 'published_at');
            $table->renameColumn('updated_at', 'last_updated_at');
        });
    }

    public function down()
    {
        Schema::dropIfExists('posts');
    }
}

在上述代码中,我们先创建了 "posts" 数据表,并生成了默认的时间戳列。然后,使用 renameColumn 方法将 "created_at" 列重命名为 "published_at",将 "updated_at" 列重命名为 "last_updated_at"。这样,我们就成功地创建了一个带有自定义时间戳列的模型数据表。

使用自定义时间戳列

一旦我们完成了模型和迁移文件的创建,我们就可以使用自定义时间戳列了。例如,我们可以在创建新文章时,设置 "published_at" 字段的值为当前时间戳:

$post = new Post;
$post->title = 'Sample Post';
$post->content = 'This is a sample post.';
$post->published_at = now();
$post->save();

在上述代码中,使用 now() 函数来获取当前的时间戳,并将其赋值给 "published_at" 字段。然后,我们调用 save() 方法来保存模型数据。

另外,我们也可以修改已有文章的发布时间:

$post = Post::find(1);
$post->published_at = now();
$post->save();

在上述代码中,我们使用 find 方法根据主键找到了 ID 为 1 的文章,并将其 "published_at" 字段的值更新为当前时间戳。

结论

通过自定义时间戳列,我们可以很方便地管理模型数据的时间戳。使用 Laravel 的模型和迁移功能,我们可以轻松地实现自定义时间戳列的功能。希望这篇介绍对你有帮助!