Laravel Model中的$appends
protected $appends
是 Laravel 模型中的一个属性,用于指定哪些虚拟属性(Accessor)应该被包含在模型的数组或JSON表示中。
虚拟属性是在模型中定义的,通过使用 Accessors 和 Mutators 来访问和修改模型属性的值。这些虚拟属性不会存储在数据库中,但可以通过模型实例进行访问和操作。
当我们使用 toArray()
或 toJson()
方法转换模型实例时,默认情况下只会包含模型的实际数据库字段。如果我们想包含一些虚拟属性,就需要使用 $appends
属性。
举个例子,假设我们有一个 User
模型,其中有一个虚拟属性 full_name
:
class User extends Model { protected $appends = ['full_name']; public function getFullNameAttribute() { return $this->first_name . ' ' . $this->last_name; } }
在这个例子中,我们定义了 $appends
属性,将 'full_name'
添加到其中。这意味着当我们转换 User
模型实例时,full_name
属性将被包含在数组或JSON输出中:
$user = User::first(); return $user->toArray(); // 输出中包含 'full_name' 属性 return $user->toJson(); // 输出中包含 'full_name' 属性
使用 $appends
属性可以帮助您更方便地控制模型的输出,包括在API响应中返回虚拟属性。这样可以避免在每次使用模型时都手动调用 getAttribute()
方法来获取虚拟属性的值。
总之,$appends
属性是一个非常有用的功能,可以帮助您更好地管理和定制模型的数据输出。
- EG
## user.model protected $appends = 'humanCreateAt'; public function getHumenCreateAtAttribute (){ return $this->create_at->diffForHumans(); }
补充知识
Accessors 和 Mutators 是 Laravel 模型中的两个非常有用的功能,用于自定义模型属性的访问和赋值。
- Accessors (访问器)
Accessors 允许您在返回模型属性值之前对其进行转换或修改。它们通过在模型中定义get{Attribute}Attribute
方法来实现。
class User extends Model { public function getFirstNameAttribute($value) { return ucfirst($value); } } $user = User::first(); echo $user->first_name; // 输出: "John"
在上面的例子中,当我们访问 first_name
属性时,Accessor 方法 getFirstNameAttribute
会被调用,并将数据库中保存的值作为参数传递进去。这个方法可以对该值进行修改(如转换为首字母大写)后返回。
- Mutators (修改器)
Mutators 允许您在设置模型属性值之前对其进行转换或验证。它们通过在模型中定义set{Attribute}Attribute
方法来实现。
class User extends Model { public function setPasswordAttribute($value) { $this->attributes['password'] = bcrypt($value); } } $user = new User; $user->password = 'secret'; // 密码会被加密后存储
在上面的例子中,当我们设置 password
属性时,Mutator 方法 setPasswordAttribute
会被调用,并将赋值的 'secret'
字符串作为参数传递进去。这个方法可以对该值进行修改(如加密)后将其存储在模型的 $attributes
属性中。
Accessors 和 Mutators 的主要用途包括:
- 数据格式化:将数据库中存储的值转换为更加友好的格式。
- 安全性:在存储敏感数据(如密码)时进行加密或哈希。
- 业务逻辑:根据其他属性值计算出新的属性值。
通过使用 Accessors 和 Mutators,您可以更好地控制模型属性的读取和赋值过程,提高代码的可读性和可维护性。
如果您有任何其他疑问,欢迎继续询问。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步