Laravel:更改时间戳'数据库中的名称

时间:2018-05-09 08:28:35

标签: laravel sql-timestamp

我正在尝试重命名数据库中created_at表的时间戳列(updated_atuser)。我已经看过this answer但是当我覆盖CREATED_ATUPDATED_AD这样的常量时:

class User extends Authenticatable
{
    const CREATED_AT = 'user_creation_date';
    const UPDATED_AT = 'user_update_date';
    ...
}

它只是重命名User模型的属性,即$user->user_creation_date$user->user_update_date。数据库列保持不变。如何在保留自动更新功能的同时重命名数据库的列?

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您需要在using (student_id, data_id)更新用户表转移文件,它将是database/migrations这样的文件。

2014_10_12_000000_create_users_table.php来电可能会$table->timestamps();

查看Schema::createtimestamp()的代码,其中显示:

vendor/laravel/framework/src/Illuminate/Database/Schema/Blueprint.php

所以:

public function timestamps($precision = 0)
{
    $this->timestamp('created_at', $precision)->nullable();

    $this->timestamp('updated_at', $precision)->nullable();
}

删除对Schema::create('users', function (Blueprint $table) { // .. $table->timestamps(); }); 的调用,然后添加添加要调用时间戳的两列:

$table->timestamps();

您需要再次运行迁移,请确保备份数据,因为这将删除表并重新创建它们。

希望这有帮助。

答案 1 :(得分:1)

您可以使用get属性,例如

class User extends Authenticatable
{
    protected $timestamps = true;
    protected $hidden = ['created_at', 'updated_at']; 
    protected $appends = ['user_creation_date', 'user_update_date']; 
    public function getUserCreationDateAttribute(){
        return $this->created_at; 
    }
    public function getUserUpdateDateAttribute(){
        return $this->updated_at; 
    }
}

现在,您将在字段created_atupdated_at中获得两列user_creation_dateuser_update_date数据。当您返回created_atupdated_at回复或将array转换为jsonobject时,字段arrayjson将保持隐藏状态。