1. 程式人生 > >laravel實現Model的setAttribute、getAttribute、scopeQuery方法

laravel實現Model的setAttribute、getAttribute、scopeQuery方法

首先要定義一個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();

純原創,希望可以對大家有幫助,如有疑問,歡迎評論