Laravel Eloquent ORM字段處理


追加屬性append的使用
1、如果你的需要的數據,是根據數據庫中的某個值,計算出來。可以appends中增加該屬性,再定義一個訪問器返回對應的結果

注:定義在模型類上,對所有的模型數據都會增加該屬性。

2、如果只對部分數據需要的屬性,可以在取出數據庫值后再append
protected $appends = ['is_title '];

記錄append的坑 append中使用的字段都要查詢出來,title和name都要select出來,不然is_title 返回為空

class User extends Model
{
    #以下屬性和方法都不是必須的,但是一般都要按需求定義一些
    
 
    //定義關聯的表名,不定義的話默認此模型關聯的表為 模型名s (users)
    protected $table = 'user';
   
 
    /******字段相關*******/
    #定義主鍵字段名,默認是id
    protected $primaryKey = 'uid';
    #定義字段白名單,允許操作表中的哪些字段
    protected $fillable = ['uid','name'];
    #定義字段黑名單,不允許操作表中哪些字段
    protected $guarded = [];
    //1、使用model::create([])等方法直接對orm對象操作使,必須定義$guarded或者$fillable
    //2、使用$m = new model();然后$m->save()的方式不需要定義
    //3、簡便的方式就是定義$fillable = [];
    
    #定義隱藏的字段
    protected $hidden = [];
    
    /******時間管理******/
    #定義是否默認維護時間,默認是true.改為false,則以下時間相關設定無效
    public $timestamps = true;
    #定義數據行創建時間和修改時間的字段名稱。默認created_at,updated_at,沒有設null
    const CREATED_AT = 'created';
    const UPDATED_AT = null;
 
    #此屬性決定插入和取出數據庫的格式,默認datetime格式,'U'是int(10)
    protected $dateFormat = 'U';
    //如果不設置,無論存儲格式是datetime還是int,則取出時是Carbon對象
    //Carbon對象返給前端時自動變為datetime字符串,后端謹慎處理
 
    #如果數據庫存的是datetime或者沒定義$dateFormat,又想取出的時候是int...
    public function getDates(){
        return ['created_at'];
    }
    //這里只能是created_at,updated_at,不是你自己的字段
    
    #軟刪除字段deleted_at
    use Illuminate\Database\Eloquent\SoftDeletes;
    protected $dates = ['deleted_at'];
    #查詢數據時會自動排除掉deleted_at非null的數據,若向帶上使用User::withTrashed()
    #刪除某條數據時使用$user->delete()然后save()即可。deleted_at由null變為時間.
 
 
 
 
    /******序列化******/
    #toArray和toJson就是序列化方法,都是遞歸的。
 
    #把ORM查詢的數據自動轉換。例如把int轉boolean,時間戳轉時間,json轉成數組等。
    protected $casts = [
        'created'   => 'date:Y-m-d',
        'updated'   => 'datetime:Y-m-d H:i',
        'jsonData'  => 'array',
        'intSwitch' => 'boolean'
    ];
    //關於這個時間的序列化,當作為接口返回的時候有效,如果直接直接頁面渲染無效.
    //時間序列化,當$timestamp為true時,無論是update還是new的方式插入新數據,都要是datetime
    //注意取出的jsonData即是數組,而插入jsonData時也得是數組,不要json_encode
 
 
 
 
    /**自定義數據返回***/
    #再如果,你想拿出來就是'2018/08/08 12:00'這種自定義格式,好比'sa_time'
    public function getSaTimeAttribute($value){
        return date('Y/m/d H:i',$value);
    }
    //注意方法名是根據字段來的。同理,這種方法可以處理任何字段

    //getxxAttribute 在獲取xx屬性的時候  $obj->xx 會轉化  
    //setxxAttribute 在設置(sql: insert update) 的時候 會將$obj->xx = 'value'的時候, 操作數據庫之前 自動轉化一下

    //存入之前的改變
    public function setFirstNameAttribute($value)
    {
        $this->attributes['first_name'] = strtolower($value);
    }  

    //laravel 增加不存在數據庫的字段
    //有時候您可能想要增加不存在數據庫字段的屬性數據。這時候只要定義一個獲取器即可:
    public function getIsAdminAttribute()
    {
          return $this->attributes['admin'];
    }
    //定義好獲取器之后,再把對應的屬性名稱加到模型里的 appends 屬性:
    protected $appends = ['is_admin'];
    
}


免責聲明!

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



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