99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Eloquent ORM ―― 調(diào)整器

2018-02-24 15:38 更新

Eloquent ORM —— 訪問(wèn)器&修改器

1、簡(jiǎn)介

訪問(wèn)器屬性。例如,你可能想要使用Laravel加密器對(duì)存儲(chǔ)在數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行加密,并且在Eloquent模型中訪問(wèn)時(shí)自動(dòng)進(jìn)行解密。

除了自定義訪問(wèn)器和修改器,Eloquent還可以自動(dòng)轉(zhuǎn)換日期字段為Carbon實(shí)例甚至將文本轉(zhuǎn)換為JSON。

2、訪問(wèn)器 & 修改器

2.1 定義訪問(wèn)器

要定義一個(gè)訪問(wèn)器,需要在模型中創(chuàng)建一個(gè)getFooAttribute方法,其中Foo是你想要訪問(wèn)的字段名(使用駝峰式命名規(guī)則)。在本例中,我們將會(huì)為first_name屬性定義一個(gè)訪問(wèn)器,該訪問(wèn)器在獲取first_name的值時(shí)被Eloquent自動(dòng)調(diào)用:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

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

正如你所看到的,該字段的原生值被傳遞給訪問(wèn)器,然后返回處理過(guò)的值。要訪問(wèn)該值只需要簡(jiǎn)單訪問(wèn)first_name即可:

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

2.2 定義修改器

要定義一個(gè)修改器,需要在模型中定義setFooAttribute方法,其中Foo是你想要訪問(wèn)的字段(使用駝峰式命名規(guī)則)。接下來(lái)讓我們?yōu)?code>first_name屬性定義一個(gè)修改器,當(dāng)我們?yōu)槟P蜕系?code>first_name賦值時(shí)該修改器會(huì)被自動(dòng)調(diào)用:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

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

該修改器獲取要被設(shè)置的屬性值,允許你操縱該值并設(shè)置Eloquent模型內(nèi)部屬性值為操作后的值。例如,如果你嘗試設(shè)置Sallyfirst_name屬性:

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

在本例中,setFirstNameAttribute方法會(huì)被調(diào)用,傳入?yún)?shù)為Sally,修改器會(huì)對(duì)其調(diào)用strtolower函數(shù)并將處理后的值設(shè)置為內(nèi)部屬性的值。

3、日期修改器

默認(rèn)情況下,Eloquent將會(huì)轉(zhuǎn)化created_atupdated_at列的值為Carbon實(shí)例,該類繼承自PHP原生的Datetime類,并提供了各種有用的方法。

你可以自定義哪些字段被自動(dòng)調(diào)整修改,甚至可以通過(guò)重寫(xiě)模型中的$dates屬性完全禁止調(diào)整:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model{
    /**
     * 應(yīng)該被調(diào)整為日期的屬性
     *
     * @var array
     */
    protected $dates = ['created_at', 'updated_at', 'disabled_at'];
}

如果字段是日期格式時(shí),你可以將其值設(shè)置為UNIX時(shí)間戳,日期字符串(Y-m-d),日期-時(shí)間字符串,Datetime/Carbon實(shí)例,日期的值將會(huì)自動(dòng)以正確格式存儲(chǔ)到數(shù)據(jù)庫(kù)中:

$user = App\User::find(1);
$user->disabled_at = Carbon::now();
$user->save();

正如上面提到的,當(dāng)獲取被羅列在$dates數(shù)組中的屬性時(shí),它們會(huì)被自動(dòng)轉(zhuǎn)化為Carbon實(shí)例,允許你在屬性上使用任何Carbon的方法:

$user = App\User::find(1);
return $user->disabled_at->getTimestamp();

如果你需要自定義時(shí)間戳格式,在模型中設(shè)置$dateFormat屬性,該屬性決定日期屬性將以何種格式存儲(chǔ)在數(shù)據(jù)庫(kù)中、以及序列化為數(shù)組或JSON時(shí)的格式:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Flight extends Model{
    /**
     * 模型日期的存儲(chǔ)格式
     *
     * @var string
     */
    protected $dateFormat = 'U';
}

4、屬性轉(zhuǎn)換

模型中的$casts屬性提供了便利方法轉(zhuǎn)換屬性到通用數(shù)據(jù)類型。$casts屬性是數(shù)組格式,其鍵是要被轉(zhuǎn)換的屬性名稱,其值時(shí)你想要轉(zhuǎn)換的類型。目前支持的轉(zhuǎn)換類型包括:integer,?real,?float,?double,?string,?boolean,?objectarray。

例如,讓我們轉(zhuǎn)換is_admin屬性,將其由integer類型轉(zhuǎn)換為boolean類型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model{
    /**
     * 應(yīng)該被轉(zhuǎn)化為原生類型的屬性
     *
     * @var array
     */
    protected $casts = [
        'is_admin' => 'boolean',
    ];
}

現(xiàn)在,is_admin屬性在被訪問(wèn)時(shí)總是被轉(zhuǎn)換為boolean,即使底層存儲(chǔ)在數(shù)據(jù)庫(kù)中的值是integer

$user = App\User::find(1);

if ($user->is_admin) {
    //
}

4.1 數(shù)組轉(zhuǎn)換

array類型轉(zhuǎn)換在處理被存儲(chǔ)為序列化JSON的字段是特別有用,例如,如果數(shù)據(jù)庫(kù)有一個(gè)TEXT字段類型包含了序列化JSON,添加array類型轉(zhuǎn)換到該屬性將會(huì)在Eloquent模型中訪問(wèn)其值時(shí)自動(dòng)將其反序列化為PHP數(shù)組:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model{
    /**
     * 應(yīng)該被轉(zhuǎn)化為原生類型的屬性
     *
     * @var array
     */
    protected $casts = [
        'options' => 'array',
    ];
}

類型轉(zhuǎn)換被定義后,就可以訪問(wèn)options屬性,它將會(huì)自動(dòng)從JSON反序列化為PHP數(shù)組,當(dāng)你設(shè)置options屬性的值時(shí),給定數(shù)組將會(huì)自動(dòng)轉(zhuǎn)化為JSON以供存儲(chǔ):

$user = App\User::find(1);
$options = $user->options;
$options['key'] = 'value';
$user->options = $options;
$user->save();
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)