laravel :模型之訪問器與修改器


作用:訪問器和修改器允許你在獲取模型屬性或設置其值時格式化 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM