laravel :模型之访问器与修改器

Eloquent访问器与修改器
本文介绍如何在Laravel中使用Eloquent ORM的访问器和修改器来格式化模型属性。通过具体示例展示了如何定义和使用这些方法来处理模型属性的获取和设置。

作用:访问器和修改器允许你在获取模型属性或设置其值时格式化 Eloquent 属性。例如,你可能想要使用 Laravel 加密器对存储在数据库中的数据进行加密,并且在 Eloquent 模型中访问时自动进行解密。

 

定义访问器:

public function getFooAttribute($value){
    //这里可以对 $value 做一些转换等操作
    return $vlaue;
}

其中,Foo 代表对应的属性,使用「驼峰式」命名。

定义修改器:

public function setFooAttribute($value)
{
    $this->attributes['foo'] = strtolower($value);
}

 

访问器 & 修改器

定义访问器

要定义一个访问器,需要在模型中创建一个 getFooAttribute 方法,其中 Foo 是你想要访问的字段名(使用驼峰式命名规则)。在本例中,我们将会为 first_name 属性定义一个访问器,该访问器在获取 first_name 的值时被 Eloquent 自动调用:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * 获取用户的名字
     *
     * @param  string  $value
     * @return string
     */
    public function getFirstNameAttribute($value)
    {
        return ucfirst($value);
    }
}

正如你所看到的,该字段的原生值被传递给访问器,然后返回处理过的值。要访问该值只需要简单访问 first_name即可:

$user = App\User::find(1);
$firstName = $user->first_name;

当然,你也可以使用访问器将已存在的属性转化为全新的、经过处理的值:

/**
 * 获取用户的全名
 *
 * @return string
 */
public function getFullNameAttribute()
{
    return "{$this->first_name} {$this->last_name}";
}
定义修改器

要定义一个修改器,需要在模型中定义 setFooAttribute 方法,其中 Foo 是你想要访问的字段(使用驼峰式命名规则)。接下来让我们为 first_name 属性定义一个修改器,当我们为模型上的 first_name 赋值时该修改器会被自动调用:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * 设置用户的名字
     *
     * @param  string  $value
     * @return string
     */
    public function setFirstNameAttribute($value)
    {
        $this->attributes['first_name'] = strtolower($value);
    }
}

该修改器获取要被设置的属性值,允许你操纵该值并设置 Eloquent 模型内部属性值为操作后的值。例如,如果你尝试设置 Sally 的 first_name 属性:

$user = App\User::find(1);
$user->first_name = 'Sally';

在本例中,setFirstNameAttribute 方法会被调用,传入参数为 Sally,修改器会对其调用 strtolower 函数并将处理后的值设置为内部属性的值。

 

链接:http://laravelacademy.org/post/8875.html

 

转载于:https://www.cnblogs.com/xzj8023tp/p/9494037.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值