我正在将我们的一个Web应用程序从CodeIgniter转换为Laravel。但是目前我们不想将updated_at
/ created_at
字段添加到我们的所有表中,因为我们已经有了一个日志类,它已经为我们更深入地完成了所有这些。
我知道我可以设置$timestamps = false;
:
Vendor\laravel\framework\src\illuminate\Datebase\Eloquent\Model.php
但是我不想更改Laravel的核心文件,或者让我的模型中的每个人都在顶部。有没有办法在其他所有模型中禁用它?
答案 0 :(得分:285)
您必须在每个模型中声明public $timestamps = false;
,或者创建一个BaseModel,在那里定义它,并让所有模型扩展它而不是雄辩。如果您正在使用Eloquent,请记住,数据透视表必须有时间戳。
更新:请注意,在Laravel v3之后,透视表中不再需要时间戳。
更新:您还可以通过从迁移中删除$table->timestamps()
来停用时间戳。
答案 1 :(得分:87)
只需将public $timestamps = false;
放入您的模型中即可。
答案 2 :(得分:18)
如果您只需要禁用更新updated_at,只需将此方法添加到您的模型中。
public function setUpdatedAtAttribute($value)
{
// to Disable updated_at
}
这将覆盖父setUpdatedAtAttribute()方法。 created_at将照常工作。 您可以编写一种方法来禁用仅更新created_at。
答案 3 :(得分:13)
如果您使用的是5.5.x:
const UPDATED_AT = null;
对于'created_at'字段,您可以使用:
const CREATED_AT = null;
确保您使用的是最新版本。 (这在Laravel 5.5.0中已打破,并在5.5.5中再次修复。)
答案 4 :(得分:7)
雄辩模型:
class User extends Model
{
protected $table = 'users';
public $timestamps = false;
}
或者只需尝试
$users = new Users();
$users->timestamps = false;
$users->name = 'John Doe';
$users->email = 'johndoe@example.com';
$users->save();
答案 5 :(得分:5)
如果要从现有模型中删除时间戳,如前所述,请将其放入模型中:
public $timestamps = false;
还使用up()
方法中的以下代码创建迁移并运行它:
Schema::table('your_model_table', function (Blueprint $table) {
$table->dropTimestamps();
});
您可以在$table->timestamps()
方法中使用down()
来允许回滚。
答案 6 :(得分:4)
只需将public
中的Model
时间戳变量声明为false
,一切都会很好。
public $timestamps = false;
答案 7 :(得分:1)
您可以暂时禁用时间戳记
$timestamps = $user->timestamps;
$user->timestamps=false; // avoid view updating the timestamp
$user->last_logged_in_at = now();
$user->save();
$user->timestamps=$timestamps; // restore timestamps
答案 8 :(得分:0)
覆盖模型中的setUpdatedAt()
和getUpdatedAtColumn()
函数
public function setUpdatedAt($value)
{
//Do-nothing
}
public function getUpdatedAtColumn()
{
//Do-nothing
}
答案 9 :(得分:0)
将此行添加到模型中
将现有变量
$timestamps
true 覆盖为 false
/**
* Indicates if the model should be timestamped.
*
* @var bool
*/
public $timestamps = false;