laravel實現Model的setAttribute、getAttribute、scopeQuery方法
阿新 • • 發佈:2018-12-28
首先要定義一個Model
1.getAttribute的實現
請getFooAttribute
在模型上建立一個方法,其中Foo
包含您要訪問的列的“studly”外殼名稱。在這個例子中,我們將為first_name
屬性定義一個訪問器。嘗試檢索sex
屬性值時,Eloquent會自動呼叫訪問者:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model { public function getSexAttribute($sex) { if ($sex == 1) return '男'; if ($sex == 2) return '女'; return '未知'; } }
查詢出來模型以後獲取sex,將是男或者女或者未知
$user = App\User::find(1);
$sex = $user->sex;
dd($sex); // 男
2.setAttribute
的實現
請getFooAttribute
在模型上建立一個方法,其中Foo
包含您要訪問的列的“studly”外殼名稱。在這個例子中,我們將為first_name
屬性定義一個訪問器。嘗試檢索sex
屬性值時,Eloquent會自動呼叫訪問者:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model { public function setSexAttribute($sex) { $this->attributes['sex'] = $sex; } }
查詢出來模型以後獲取sex,將是男或者女或者未知
$user = App\User::find(1);
$user->sex = '我是sex';
dd($user->sex); // 我是sex
3.scopeQuery
的實現
本地範圍允許您定義可在整個應用程式中輕鬆重用的常見約束集。例如,您可能需要經常檢索所有被視為“受歡迎”的使用者。要定義範圍,請使用Eloquent模型方法作為字首scope
。範圍應始終返回查詢構建器例項:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model { public function scopeSex($query) { return $query->where('sex', 1); } }
定義後,可以在查詢模型時呼叫該方法。但是,scope
呼叫方法時不應包含字首。您甚至可以將呼叫連結到各種範圍,如:
$users = App\User::sex()->orderBy('created_at')->get();