Answers:
您要么public $timestamps = false;
在每个模型中声明,要么创建一个BaseModel,在其中定义它,然后让所有模型扩展它而不是雄辩的。如果您使用的是Eloquent,请记住,透视表必须有时间戳。
更新:请注意,在Laravel v3之后,数据透视表中不再需要时间戳。
更新:您也可以通过$table->timestamps()
从迁移中删除时间戳来禁用时间戳。
只需将这条线放在模型中:
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
{
//
}
如果只需要禁用更新updated_at,只需将此方法添加到模型中即可。
public function setUpdatedAtAttribute($value)
{
// to Disable updated_at
}
这将覆盖父setUpdatedAtAttribute()方法。created_at将照常工作。您可以使用相同的方法编写仅禁用更新created_at的方法。
如果您使用的是5.5.x:
const UPDATED_AT = null;
对于“ created_at”字段,您可以使用:
const CREATED_AT = null;
确保您使用的是最新版本。(这在Laravel 5.5.0中已被打破,并在5.5.5中再次得到修复)。
将此行添加到模型中:
将现有变量覆盖为
$timestamps
true到false
/**
* Indicates if the model should be timestamped.
*
* @var bool
*/
public $timestamps = false;
覆盖功能setUpdatedAt()
和getUpdatedAtColumn()
模型
public function setUpdatedAt($value)
{
//Do-nothing
}
public function getUpdatedAtColumn()
{
//Do-nothing
}