<?php namespace App\Models; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Model; class User extends Model { /** * 获取用户的名字。 * * @return \Illuminate\Database\Eloquent\Casts\Attribute */ protected function firstName(): Attribute { return Attribute::make( get: fn ($value) => ucfirst($value), ); } }
时间: 2024-04-26 10:26:36 浏览: 163
Laravel-Database-Jsonable:Laravel包可以轻松填充和检索json格式的数据库字段
这是一个定义在 User 模型中的 firstName 访问器方法,它使用 Illuminate\Database\Eloquent\Casts\Attribute 类来转换属性值。
在这个访问器中,使用了 Attribute::make 方法来创建一个新的属性转换器。该方法接受一个数组作为参数,用于定义属性读取和写入的逻辑,例如:
- get:获取属性值时的回调函数
- set:设置属性值时的回调函数
- castUsing:指定属性转换器的类名
在这个例子中,只使用了 get 回调函数,它接受一个参数 $value,表示属性的原始值。回调函数使用 ucfirst 函数将名字的第一个字符大写,然后返回转换后的值。
由于这个访问器使用了 Attribute 类,因此返回的是一个 Illuminate\Database\Eloquent\Casts\Attribute 对象,而不是普通的字符串或数组。这意味着在获取属性值时,需要使用 $user->firstName->value 来访问实际的属性值。
值得注意的是,这个访问器只定义了 firstName 属性的读取逻辑,没有定义写入逻辑。因此,如果尝试设置 $user->firstName 属性的值,将会抛出异常。如果需要支持写入逻辑,可以在 Attribute::make 方法的参数数组中添加一个 set 回调函数来实现。
总的来说,使用属性转换器可以让我们更加灵活地控制模型属性的读写逻辑,从而提高代码的可读性和可维护性。
阅读全文