禁用Laravel的Eloquent时间戳

时间:2013-11-12 18:54:10

标签: php laravel eloquent

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

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

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

但是我不想更改Laravel的核心文件,或者让我的模型中的每个人都在顶部。有没有办法在其他所有模型中禁用它?

10 个答案:

答案 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;