Laravel中的Model
在 Laravel 中,模型(Model)中的一些常用方法包括 fillable
、guarded
、timestamps
、primaryKey
等,它们用于定义模型的属性、保护属性、自动维护时间戳和主键等。下面我逐个介绍这些方法:
-
fillable:
fillable
属性用于定义可以批量赋值的属性(字段),也就是允许用户通过模型的create
或fill
方法来设置的属性。如果你在模型中使用了fillable
属性,那么只有在fillable
中列出的属性才能够通过批量赋值来设置。这有助于防止潜在的 Mass Assignment 攻击。例如:protected $fillable = ['name', 'email', 'password']; -
guarded:
guarded
属性用于定义不可以批量赋值的属性(字段),也就是需要保护的属性。如果你在模型中使用了guarded
属性,那么除了在guarded
中列出的属性之外,所有其他属性都可以通过批量赋值来设置。你可以将guarded
属性设置为空数组(protected $guarded = [];
),这样所有属性都可以进行批量赋值。不过这种方式要谨慎使用,因为可能存在安全风险。例如:protected $guarded = ['admin']; -
timestamps:
timestamps
属性用于控制模型是否自动维护时间戳,包括created_at
和updated_at
。默认情况下,Laravel 会自动为每个模型添加这两个时间戳字段,但如果你不需要这些时间戳字段,可以将timestamps
属性设置为false
。例如:public $timestamps = false; -
primaryKey:
primaryKey
方法用于获取模型的主键字段名称。默认情况下,Laravel 假定主键字段名为id
,但你也可以在模型中重写primaryKey
方法来指定其他主键字段名。例如:protected $primaryKey = 'user_id'; -
$casts
在 Laravel 的 Eloquent ORM 中,$casts
属性是一个数组,它提供了一个简便的方法来将数据库中的属性值转换为常见的数据类型。当你从数据库获取一个模型属性时,Laravel 会自动将该属性转换为你在$casts
数组中指定的数据类型。同样,当你设置一个模型属性时,Laravel 会自动将该属性转换回其数据库原始数据类型。
这是 $casts
属性的一些常见用法:
- 数组 & JSON:将存储在数据库中的 JSON 或序列化的文本转换为 PHP 数组。
- 对象:将 JSON 或序列化的文本转换为 PHP 对象。
- 集合:将 JSON 数组转换为 Laravel 集合(Collection)实例。
- 日期 & 时间:将日期和时间字符串转换为 Carbon 实例,这是一个扩展了 PHP DateTime 类的库。
- 浮点数、整数 & 布尔值:将字符串转换为相应的 PHP 数据类型。
这里是一个实际的例子:
use Illuminate\Database\Eloquent\Model; class Product extends Model { /** * The attributes that should be cast. * * @var array */ protected $casts = [ 'is_active' => 'boolean', // 将 is_active 列转换为布尔值 'price' => 'float', // 将 price 列转换为浮点数 'options' => 'array', // 将 options 列(存储为 JSON)转换为 PHP 数组 'released_at' => 'datetime:Y-m-d', // 将 released_at 列转换为 Carbon 实例,并格式化日期 ]; }
在上面的例子中,如果 is_active
列在数据库中是一个整数(例如,0 或 1),它会被自动转换为 false
或 true
。price
列将被转换为浮点数,options
列(假设它是以 JSON 格式存储的)将被转换为一个 PHP 数组。最后,released_at
列将被转换为一个 Carbon 实例,这样你就可以使用 Carbon 提供的各种日期和时间相关的方法。
从 Laravel 7 开始,你可以在日期和时间的转换中指定格式,如 'datetime:Y-m-d'
,这样就可以在转换为 Carbon 实例的同时对日期进行格式化。
Laravel 的 $casts
功能非常强大,因为它允许你在不改变数据库模式的情况下,以更符合你应用程序逻辑的方式来操作数据。此外,它还可以提高代码的可读性和减少类型转换时可能出现的错误。
这些方法在定义模型时非常有用,它们允许你更加灵活地控制模型的属性、保护属性和时间戳等行为。
在 Laravel 的 Eloquent ORM 中,模型(Model)有几个 protected
属性,这些属性用于定义模型的行为以及它如何与数据库表交互。以下是一些最常用的 protected
属性:
-
$table:指定模型对应的数据库表名。
protected $table = 'users'; // 指定这个模型对应的表是 `users` -
$primaryKey:指定模型的主键字段。
protected $primaryKey = 'id'; // 指定主键字段,默认是 `id` -
$fillable:定义哪些列可以使用批量赋值。
protected $fillable = ['name', 'email', 'password']; // 只有这些列可以批量赋值 -
$guarded:定义哪些列不可以使用批量赋值。
protected $guarded = ['id']; // `id` 字段不可以被批量赋值 -
$casts:定义如何将数据库字段值转换为常用的数据类型。
protected $casts = [ 'is_admin' => 'boolean', // 将 `is_admin` 字段转换为布尔值 'created_at' => 'datetime:Y-m-d', // 将 `created_at` 字段转换为指定格式的日期时间 ]; -
$dates:定义哪些字段应该被自动处理为 Carbon(日期时间)实例。
protected $dates = ['created_at', 'updated_at']; // 这些字段会自动转换为 Carbon 实例 -
$appends:定义访问器(Accessor)添加到模型数组和 JSON 表示中的属性。
protected $appends = ['is_admin']; public function getIsAdminAttribute() { return $this->attributes['admin'] == 1; } -
$hidden:定义在模型数组和 JSON 显示时应该隐藏的字段。
protected $hidden = ['password', 'remember_token']; // 这些字段在数组或 JSON 显示时会被隐藏 -
$visible:与
$hidden
相反,定义在模型数组和 JSON 显示时应该显示的字段。protected $visible = ['name', 'email']; // 只有这些字段在数组或 JSON 显示时会被包含 -
$timestamps:表示模型是否应该自动维护
created_at
和updated_at
时间戳。public $timestamps = false; // 如果设置为 false,则不会自动维护时间戳
这些属性在模型类中定义,允许你根据需要定制模型的行为。例如,使用 $fillable
或 $guarded
可以保护你的应用程序不受到批量赋值漏洞的影响。使用 $casts
可以确保当你从数据库获取数据时,它们会自动转换为你希望的数据类型,这样可以简化数据处理和验证的工作。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现