我正在将我们的一个 Web 应用程序从 CodeIgniter 转换为 Laravel。但是,此时我们不想将 updated_at
/ created_at
字段添加到我们所有的表中,因为我们有一个日志记录类已经为我们更深入地完成了所有这些工作。
我知道我可以将 $timestamps = false;
设置为:
Vendor\laravel\framework\src\illuminate\Datebase\Eloquent\Model.php
但是,我宁愿不更改 Laravel 的核心文件,或者让我的每个模型都将其放在顶部。有没有办法在其他地方为所有型号禁用此功能?
您要么必须在每个模型中声明 public $timestamps = false;
,要么创建一个 BaseModel,在那里定义它,然后让所有模型扩展它而不是 eloquent。如果您使用 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
{
//
}
如果您使用的是 5.5.x:
const UPDATED_AT = null;
对于“created_at”字段,您可以使用:
const CREATED_AT = null;
确保您使用的是最新版本。 (这在 Laravel 5.5.0 中被破坏并在 5.5.5 中再次修复)。
如果您只需要禁用更新 updated_at 只需将此方法添加到您的模型中。
public function setUpdatedAtAttribute($value)
{
// to Disable updated_at
}
这将覆盖父 setUpdatedAtAttribute() 方法。 created_at 将照常工作。同样的方式你可以编写一个方法来禁用更新 created_at 。
如果您想从现有模型中删除时间戳,如前所述,请将其放在您的模型中:
public $timestamps = false;
还在 up()
方法中使用以下代码创建迁移并运行它:
Schema::table('your_model_table', function (Blueprint $table) {
$table->dropTimestamps();
});
您可以在 down()
方法中使用 $table->timestamps()
来允许回滚。
口才模型:
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();
将此行添加到您的模型中:
将现有变量 $timestamps true 覆盖为 false
/**
* Indicates if the model should be timestamped.
*
* @var bool
*/
public $timestamps = false;
只需将 Model
中的 public
时间戳变量声明为 false
,一切都会很好。
public $timestamps = false;
覆盖模型中的函数 setUpdatedAt()
和 getUpdatedAtColumn()
public function setUpdatedAt($value)
{
//Do-nothing
}
public function getUpdatedAtColumn()
{
//Do-nothing
}
您可以暂时禁用时间戳
$timestamps = $user->timestamps;
$user->timestamps=false; // avoid view updating the timestamp
$user->last_logged_in_at = now();
$user->save();
$user->timestamps=$timestamps; // restore timestamps
$timestamps = false;
显式禁用时间戳,例如,为没有任何created_at
和updated_at
字段的表播种。