📅  最后修改于: 2023-12-03 14:57:07.951000             🧑  作者: Mango
在 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 的模型和迁移功能,我们可以轻松地实现自定义时间戳列的功能。希望这篇介绍对你有帮助!