Laravel 使用筆記之一 訪問器

kiti發表於2020-06-11

原始資料:

{
    "id": 1,
    "name": "AnYing",
    "c_at": "1970-01-01 08:00:01"
}

模型示例:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Member extends Model
{

    public function getNameAttribute($value)
    {
        return 'Hellow ' . $value;
    }
}

1、return 返回資料

Route::get('/',function(){
    return \App\Models\Member::query()->find(1);
});

結果

{
    "id": 1,
    "name": "Hellow AnYing",
    "c_at": "1970-01-01 08:00:01"
}

2、 dd 列印模型

Route::get('/',function(){
    dd(\App\Models\Member::query()->find(1));
});

結果

#attributes: array:3 ["id" => 1
    "name" => "AnYing"
    "c_at" => "1970-01-01 08:00:01"
  ]

3、dd 指定欄位

Route::get('/',function(){
    dd(\App\Models\Member::query()->find(1)->name);
});

結果

"Hellow AnYing"

大家在使用的時候要注意returndd()的區別,不要覺得列印資料的時候沒有看到自己使用修改器修改的欄位就覺得自己寫錯了。

另外修改指定欄位的時候有兩種方式

//引數傳值
public function getNameAttribute($value)
{
    return 'Hellow ' . $value;
}

或者

//使用$this->attributes
public function getNameAttribute()
{
    return 'Hellow ' . $this->attributes['name'];
}

新增新欄位同樣有兩種方式,但是不可以使用傳值方式。除了 $this->attributes 之外,還可以使用下面這種方式

public function getFullNameAttribute()
{
    return 'Hellow ' . $this->name;
}

如有錯誤,歡迎批評指正。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章