主页/PHP笔记/PHP问答/框架Laravel/如何在Laravel Eloquent中禁用或启用时间戳

如何在Laravel Eloquent中禁用或启用时间戳

Bug编译狮

Bug编译狮

在 Laravel Eloquent 中,你可以通过修改模型的 $timestamps 属性来禁用或启用时间戳功能。默认情况下,Eloquent 模型会自动创建和更新 created_atupdated_at 字段。

禁用时间戳

如果你希望在数据库表中不使用 created_atupdated_at 字段,可以在模型类中将 $timestamps 属性设置为 false

namespace App;

use IlluminateDatabaseEloquentModel;

class YourModel extends Model
{
    // 禁用时间戳
    public $timestamps = false;
}

启用时间戳

如果你需要在数据库表中使用 created_atupdated_at 字段,并且希望 Eloquent 自动处理这些字段的更新,可以保留 $timestamps 属性默认值:

namespace App;

use IlluminateDatabaseEloquentModel;

class YourModel extends Model
{
    // 保留默认的 timestamps 属性
}

示例代码

以下是一个完整的示例,展示了如何在 Laravel Eloquent 中禁用和启用时间戳:

// 定义模型类
namespace App;

use IlluminateDatabaseEloquentModel;

class Product extends Model
{
    // 禁用时间戳
    public $timestamps = false;

    // 可选:定义其他模型属性
    protected $fillable = ['name', 'price'];
}

// 使用模型
$product = new Product();
$product->name = 'Laptop';
$product->price = 1200.00;

// 保存数据(不会自动添加 created_at 和 updated_at 字段)
$product->save();

// 更新数据(会自动更新 created_at 和 updated_at 字段)
$product->update(['price' => 1300.00]);

通过这种方式,你可以灵活地控制模型的时间戳行为,以满足不同的需求。

黑板Bug讲师

黑板Bug讲师

介绍

Laravel Eloquent 是一个强大的对象关系映射(ORM)工具,它简化了与数据库表关联的模型相关的数据操作。默认情况下,Eloquent 预期使用关联数组来访问数据库中的记录。created_atand 还是。updated_at在你的表上创建列,这些列由它自动管理,反映模型实例的创建和更新时间戳。在这篇文章中,我们将探索如何控制这些时间戳,无论是当不需要时禁用它们还是根据应用程序需求启用它们。

在Eloquent中禁用时间戳。

在处理Laravel中的模型时,Eloquent可以自动设置created_atandupdated_at在插入或更新操作期间,通常会记录字段的状态变化。这种行为不仅方便快捷,而且是标准做法之一,用于跟踪何时添加或修改了记录。然而,在某些情况下,这些时间戳可能不需要,或者您可能希望手动进行管理。

全局禁用时间戳

如果您不需要的话,请告知我。created_atand 是中文中的“和”的意思,用于连接两个并列的词语或短语。updated_at在任何模型上添加列时,你可以全局禁用时间戳吗?请设置相应的选项。$timestamps对不起,我不太明白你的意思,请重新描述一下。false在您的基础模型中,通常指的是哪一个?AppModelsModel在Laravel 8及以上版本中,你需要使用类(class)。

<?php

namespace AppModels;

use IlluminateDatabaseEloquentModel as BaseModel;

class Model extends BaseModel
{
    public $timestamps = false;
}

所有继承此基础模型的模型都将继承时间戳行为,因此不会使用自动时间戳。

每个模型的时戳禁用。

要按模型基础设置自动时间戳,您可以设置它们。$timestamps对不起,您的问题不明确,请提供更多信息。false在个体模型类中。例如:

<?php

namespace AppModels;

use IlluminateDatabaseEloquentModel;

class Post extends Model
{
    public $timestamps = false;
}

在时间戳已禁用的情况下,您需要手动设置这些时间戳字段的值(如果您的表中有这些字段)或完全放弃它们。

启用时间戳

为了在已关闭时间戳的模型上重新启用时间戳,需要设置它。$timestamps对不起,我无法理解您的问题。如果您有其他问题,请重新描述一下。true这将控制权重新交给Eloquent来管理时间戳字段。

<?php

namespace AppModels;

use IlluminateDatabaseEloquentModel;

class Post extends Model
{
    public $timestamps = true;
}

自定义时间戳列名

在某些情况下,您可能希望为您的时间戳使用不同的列名。Eloquent 允许您通过设置这些列名来自定义它们。const CREATED_ATand也是,我们在等消息呢。const UPDATED_AT好的,请提供需要翻译的内容。

<?php

namespace AppModels;

use IlluminateDatabaseEloquentModel;

class Post extends Model
{
    const CREATED_AT = 'creation_date';
    const UPDATED_AT = 'last_modified';
}

这告诉 eloquent 使用creation_dateand 是中文中的“并且”、“而且”的意思。last_modified而不是默认的created_atand 是“并且”的意思。updated_at在进行自动时间戳时。

高级用例

现在让我们探讨一些高级场景。Laravel 允许您以更精细的方式操作时间戳,例如在创建或更新模型时直接设置时间戳,或者防止默认的生成行为。updated_at在批量更新时,字段可能会发生变化。

要设置时间戳:

$post = new AppModelsPost([
    // other attributes
    'creation_date' => now(),
    'last_modified' => now(),
]);

$post->save();

为了防止updated_at在大规模更新期间:

AppModelsPost::where('active', 1)->update([
    'status' => 'archived',
], ['timestamps' => false]);

请注意,我们传递的是什么。['timestamps' => false]作为第二个参数,到update该方法告诉Eloquent不要对当前操作中的时间戳列进行任何处理。

故障排除

有时候,可能会遇到时间戳的问题,例如:NULL由于您在时间戳列插入了值,尽管已经存在。$timestamps设置为true或Eloquent无法识别您的自定义时间戳列。在这种情况下,请确保数据库表结构与模型期望相符,并仔细检查模型属性和常量中的拼写错误。

结论。

在这段教程中,我们介绍了如何在Laravel的Eloquent ORM中启用和禁用自动时间戳处理。我们详细讲解了全局设置、按模型设置、自定义列名、排查技巧以及高级使用场景。控制Eloquent中的时间戳行为可以帮助您进一步优化您的Laravel应用程序的功能。

长工码奴1523

长工码奴1523

要在 Laravel Eloquent 中禁用或启用时间戳,您可以使用 ORM 的 withTimestampswithoutTimestamps 方法来实现。这两个方法分别用于启用和禁用时间戳。

示例:

首先,确保您已经安装了 Eloquent 模块,并且已正确导入了相应的模型类。

use IlluminateDatabaseEloquentModel;

然后,假设我们有一个名为 User 的模型,它有一个属性 created_at 代表创建日期和时间。

class User extends Model
{
    use HasTimestamps;

    // ...
}

禁用时间戳

要禁用时间戳,只需删除 timestamps 属性即可。这将使模型不保留任何创建日期和时间信息。

class User extends Model
{
    protected $casts = [
        'created_at' => 'datetime',
        'updated_at' => 'datetime',
    ];

    // ...
}

启用时间戳

如果需要保留时间戳信息,可以将 casts 配置更改为:

protected $casts = [
    'created_at' => 'datetime:Y-m-d H:i:s',
    'updated_at' => 'datetime:Y-m-d H:i:s',
];

这样,即使没有设置 timestamps 属性,也可以通过显式设置 createdAtupdatedAt 来更新这些字段。

示例代码

下面是一个简单的示例,展示了如何在 Eloquent 中禁用和启用时间戳:

// 原始模式
$user = new User();
$user->save();

// 禁用时间戳
$user->timestamps = false;
$user->save();

// 重新启用时间戳
$user->timestamps = true;
$user->save();

结论

以上就是在 Laravel Eloquent 中禁用或启用时间戳的简单方法。通过调整 casts 配置,您可以根据实际需求灵活选择是否保留时间戳信息。希望这对您有所帮助!如果您有任何其他问题,请随时提问。