禁用Laravel的雄辩时间戳

2022-08-30 06:10:14

我正在将我们的一个Web应用程序从CodeIgniter转换为Laravel。但是,目前我们不想将 / 字段添加到所有表中,因为我们有一个日志记录类,它已经为我们更深入地完成了所有这些操作。updated_atcreated_at

我知道我可以设置:$timestamps = false;

Vendor\laravel\framework\src\illuminate\Datebase\Eloquent\Model.php

但是,我宁愿不更改Laravel的核心文件,或者让我的每个模型都将其放在顶部。有没有办法为所有模型在其他地方禁用此功能?


答案 1

您要么必须在每个模型中声明,要么创建一个BaseModel,在那里定义它,并让所有模型扩展它而不是雄辩。请记住,如果您使用的是Eloquent,数据透视表必须具有时间戳。public $timestamps = false;

更新:请注意,在Laravel v3之后,数据透视表中不再需要时间戳。

更新:您还可以通过从迁移中删除来禁用时间戳。$table->timestamps()


答案 2

只需将此行放在模型中:

public $timestamps = false;

就是这样!


例:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    public $timestamps = false;

    //
}

要禁用一个操作的时间戳(例如,在控制器中):

$post->content = 'Your content'; 
$post->timestamps = false; // Will not modify the timestamps on save
$post->save();

禁用所有模型的时间戳,请创建一个新文件:BaseModel

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class BaseModel extends Model
{
    public $timestamps = false;

    //
}

然后用 扩展每个模型,如下所示:BaseModel

<?php

namespace App;

class Post extends BaseModel
{
    //
}

推荐