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 模型中的两个非常有用的功能,用于自定义模型属性的访问和赋值。

  1. 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 会被调用,并将数据库中保存的值作为参数传递进去。这个方法可以对该值进行修改(如转换为首字母大写)后返回。

  1. 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 的主要用途包括:

  1. 数据格式化:将数据库中存储的值转换为更加友好的格式。
  2. 安全性:在存储敏感数据(如密码)时进行加密或哈希。
  3. 业务逻辑:根据其他属性值计算出新的属性值。

通过使用 Accessors 和 Mutators,您可以更好地控制模型属性的读取和赋值过程,提高代码的可读性和可维护性。

如果您有任何其他疑问,欢迎继续询问。

posted @ 2024-05-13 15:15  Laravel自学开发  阅读(289)  评论(0编辑  收藏  举报