pro*_*att 163 php laravel eloquent
我正在将我们的一个Web应用程序从CodeIgniter转换为Laravel.但是此时我们不想将updated_at/ created_atfields 添加到所有表中,因为我们已经有了一个日志类,它已经为我们更深入地完成了所有这些.
我知道我可以$timestamps = false;进入:
Vendor\laravel\framework\src\illuminate\Datebase\Eloquent\Model.php
Run Code Online (Sandbox Code Playgroud)
但是我宁愿不为Laravel更改核心文件,也不要让我的每个模型都在顶部.有没有办法在其他所有型号禁用它?
bga*_*h3r 328
您要么必须public $timestamps = false;在每个模型中声明,要么创建一个BaseModel,在那里定义它,并让所有模型扩展它而不是雄辩.如果您正在使用Eloquent,请记住,数据透视表必须有时间戳.
更新:请注意,在Laravel v3之后,数据透视表中不再需要时间戳.
更新:您还可以通过$table->timestamps()从迁移中删除来禁用时间戳.
Sam*_*era 22
如果您只需要禁用更新updated_at,只需将此方法添加到模型中即可.
public function setUpdatedAtAttribute($value)
{
// to Disable updated_at
}
Run Code Online (Sandbox Code Playgroud)
这将覆盖父setUpdatedAtAttribute()方法.created_at将照常工作.同样,您可以编写一个方法来禁用仅更新created_at.
Sam*_*era 18
如果您使用的是5.5.x:
const UPDATED_AT = null;
Run Code Online (Sandbox Code Playgroud)
对于'created_at'字段,您可以使用:
const CREATED_AT = null;
Run Code Online (Sandbox Code Playgroud)
确保您使用的是最新版本.(这在Laravel 5.5.0中被破坏,并在5.5.5中再次修复).
小智 9
雄辩的模型:
class User extends Model
{
protected $table = 'users';
public $timestamps = false;
}
Run Code Online (Sandbox Code Playgroud)
或者只是试试这个
$users = new Users();
$users->timestamps = false;
$users->name = 'John Doe';
$users->email = 'johndoe@example.com';
$users->save();
Run Code Online (Sandbox Code Playgroud)
如果您想从现有模型中删除时间戳,如前所述,请将其放在模型中:
public $timestamps = false;
Run Code Online (Sandbox Code Playgroud)
还可以使用up()方法中的以下代码创建迁移并运行它:
Schema::table('your_model_table', function (Blueprint $table) {
$table->dropTimestamps();
});
Run Code Online (Sandbox Code Playgroud)
您可以$table->timestamps()在down()方法中使用以允许回滚.
将此行添加到您的模型中:
覆盖现有变量
$timestamps真到假
/**
* Indicates if the model should be timestamped.
*
* @var bool
*/
public $timestamps = false;
Run Code Online (Sandbox Code Playgroud)