追加屬性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'];
}