当前位置:首页 > CMS教程 > 其它CMS > 列表

laravel 之 Eloquent 模型修改器和序列化示例

发布:smiling 来源: PHP粉丝网  添加日期:2022-01-08 15:12:44 浏览: 评论:0 

今天小编就为大家分享一篇laravel 之 Eloquent 模型修改器和序列化示例,具有很好的参考价值,希望对大家有所帮助,一起跟随小编过来看看吧。

修改器

获取

  1. <?php 
  2. namespace App; 
  3. use Illuminate\Database\Eloquent\Model; 
  4. class User extends Model { 
  5.  public function getFirstNameAttribute($value) { 
  6.   return ucfirst($value); 
  7.  } 

使用 Laravel 加密器 来加密一个被保存在数据库中的值,当你从 Eloquent 模型访问该属性时该值将被自动解密。

$user = App\User::find(1);

$firstName = $user->first_name;

修改

  1. public function setFirstNameAttribute ($value) { 
  2.  $this->attributes['first_name'] = strtolower($value); 
  3.  
  4. $user = App\User::find(1); 
  5. $user->first_name = 'Sally'

日期转化器

  1. <?php 
  2. namespace App; 
  3. use Illuminate\Database\Eloquent\Model; 
  4. class User extends Model{ 
  5.  protected $dates = [ 
  6.   'created_at'
  7.   'updated_at'
  8.   'deleted_at' 
  9.  ]; 
  10.  
  11. $user = App\User::find(1); 
  12. $user->deleted_at = Carbon::now(); 
  13. $user->save(); 

可在属性上使用任何 Carbon 方法:

$user = App\User::find(1);

echo $user->deleted_at->getTimestamp();

设置时间格式

  1. <?php 
  2. namespace App; 
  3. use Illuminate\Database\Eloquent\Model; 
  4. class Flight extends Model { 
  5.  protected $dateFormat = 'U'

属性类型转化

  1. <?php 
  2. namespace App; 
  3. use Illuminate\Database\Eloquent\Model; 
  4. class User extends Model { 
  5.  protected $casts = [ 
  6.   'is_admin' => 'boolean'
  7.  ]; 

现在当你访问 is_admin 属性时,它将会被转换成布尔值,即便保存在数据库里的值是一个整数:

  1. $user = App\User::find(1); 
  2. if ($user->is_admin) { 
  3.  // 

支持的转换的类型有:

  1. integer 
  2. real 
  3. float 
  4. double 
  5. string 
  6. boolean 
  7. object 
  8. array 
  9. collection 
  10. date 
  11. datetime 
  12. timestamp 
  13.  
  14. protected $casts = [ 
  15. #  'options' => 'array'
  16. # ]; 
  17.  
  18. $user = App\User::find(1); 
  19. $options = $user->options; 
  20. $options['key'] = 'value'
  21. $user->options = $options
  22. $user->save(); 

序列化模型或集合

序列化成数组

$user = App\User::with('roles')->first();

return $user->toArray();

序列化成 JSON

  1. $user = App\User::find(1); 
  2. return $user->toJson(); 
  3. // 或者 
  4. return (string) $user// 自动调用 toJson 
  5. // 或者 
  6. return App\User::all(); 

隐藏来自 json 的属性

  1. <?php 
  2. namespace App; 
  3. use Illuminate\Database\Eloquent\Model; 
  4.  
  5. class User extends Model { 
  6.  protected $hidden = ['password']; 
  7.  
  8. <?php 
  9. namespace App; 
  10. use Illuminate\Database\Eloquent\Model; 
  11.  
  12. class User extends Model { 
  13.  protected $visible = ['first_name''last_name']; 

临时隐藏

return $user->makeVisible('attribute')->toArray();

return $user->makeHidden('attribute')->toArray();

添加参数到 json 中

  1. <?php 
  2. namespace App; 
  3. use Illuminate\Database\Eloquent\Model; 
  4.  
  5. class User extends Model { 
  6.  protected $appends = ['is_admin']; 
  7.  
  8. # 在 appends 数组中的属性也遵循模型中 visible 和 hidden 设置 
  9. public function getIsAdminAttribute() { 
  10.  return $this->attributes['is_admin'] == 'yes'
  11. }

Tags: laravel序列化 Eloquent模型修改器

分享到: