zoukankan      html  css  js  c++  java
  • Laravel之Eloquent ORM访问器调整器及属性转换

    一.查询构建器的get方法
    查询构建器的get方法返回了一个集合
    
    $users = AppUser::where('active', 1)->get();
    foreach ($users as $user) {
    	echo $user->name;
    }
    
    二.访问器&调整器
    1.访问器:为数据库的某列在用属性读取的时候做处理
    class User extends Model{
    	/**
    	* 获取用户的名字
    	*
    	* @param string $value
    	* @return string
    	*/
    	public function getFirstNameAttribute($value)
    	{
    		return ucfirst($value);
    	}
    }
    
    调用
    $user = AppUser::find(1);
    $firstName = $user->first_name;
    
    2.调整器:为数据库的某一列在更新的时候做处理
    class User extends Model{
    	/**
    	* 设置用户的名字
    	*
    	* @param string $value
    	* @return string
    	*/
    	public function setFirstNameAttribute($value)
    	{
    		$this->attributes['first_name'] = strtolower($value);
    	}
    }
    
    $user = AppUser::find(1);
    $user->first_name = 'Sally';
    
    3.日期调整器
    class User extends Model{
    	/**
    	* 应该被调整为日期的属性
    	*
    	* @var array
    	*/
    	protected $dates = ['created_at', 'updated_at', 'disabled_at'];
    ...
    }
    
    
    如果字段是日期格式时,你可以将其值设置为 UNIX 时间戳,日期字符串( Y-m-d ),日期-时间字符串, Datetime/Carbon 实例,日期的值将会自动以正确格式存储到数据库中:
    
    $user = AppUser::find(1);
    $user->disabled_at = Carbon::now();
    $user->save();
    
    
    正如上面提到的,当获取被罗列在$dates 数组中的属性时,它们会被自动转化为Carbon 实例,允许你在属性上使用任何Carbon 的方法:
    $user = AppUser::find(1);
    return $user->disabled_at->getTimestamp();
    
    如果你需要自定义时间戳格式,在模型中设置$dateFormat 属性,该属性决定日期属性将以何种格式存储在数据库中、以及序列化为数组或 JSON 时的格式
    
    class Flight extends Model{
    	/**
    	* 模型日期的存储格式
    	*
    	* @var string
    	*/
    	protected $dateFormat = 'U';
    }
    
    三.属性转换
    
    1.在访问时将某列转为另一种类型:
    class User extends Model{
    	/**
    	* 应该被转化为原生类型的属性
    	*
    	* @var array
    	*/
    	protected $casts = [
    		'is_admin' => 'boolean', //访问is_admin字段的值时,将其转为boolean值
    	];
    }
    
    2.数组转换
    array 类型转换在处理被存储为序列化 JSON 的字段是特别有用,例如,如果数据库有一个 TEXT 字段类型包含了序列化 JSON,添加array 类型转换到该属性将会在 Eloquent 模型中访问其值时自动将其反序列化为 PHP数组:
    
    class User extends Model{
    	/**
    	* 应该被转化为原生类型的属性
    	*
    	* @var array
    	*/
    	protected $casts = [
    		'options' => 'array',
    	];
    }
    
    array 类型转换在处理被存储为序列化 JSON 的字段是特别有用,例如,如果数据库有一个 TEXT 字段类型包含
    了序列化 JSON,添加array 类型转换到该属性将会在 Eloquent 模型中访问其值时自动将其反序列化为 PHP
    数组:
    
    $user = AppUser::find(1);
    $options = $user->options;
    $options['key'] = 'value';
    $user->options = $options;
    $user->save();
    
    五.序列化
    
    1.转化模型/集合为数组
    $user = AppUser::with('roles')->first();
    return $user->toArray();
    
    $users = AppUser::all();
    return $users->toArray();
    
    2.转化模型为 JSON
    $user = AppUser::find(1);
    return $user->toJson();
    
    
    3.转为字符串
    $user = AppUser::find(1);
    return (string) $user;
    
    转换后的格式如下:
    {"id":1,"user_id":1,"name":"u6700u65b0u6d4bu8bd5","created_at":"2017-05-28 18:44:37","updated_at":"2017-05-31 23:37:55"}
    
    4.隐藏属性显示
    class User extends Model{
    	/**
    	* 在数组中隐藏的属性
    	*
    	* @var array
    	*/
    	protected $hidden = ['password'];
    }
    
    5.显示属性
    class User extends Model{
    	/**
    	* 在数组中显示的属性
    	*
    	* @var array
    	*/
    	protected $visible = ['first_name', 'last_name'];
    }
    
    6.追加值到数组
    class User extends Model{
    	/**
    	* 为用户获取管理员标识
    	*
    	* @return bool
    	*/
    	public function getIsAdminAttribute()
    	{
    		return $this->attributes['admin'] == 'yes';
    	}
    }
    
    这将在原有的列上添加一列is_admin,这需要通过属性访问时才会获得,如果我们希望在获得数据的时候被一起返回,则还需要append属性
    class User extends Model{
    	protected $appends = ['is_admin'];
    	/**
    	* 为用户获取管理员标识
    	*
    	* @return bool
    	*/
    	public function getIsAdminAttribute()
    	{
    		return $this->attributes['admin'] == 'yes';
    	}
    }
    

      

  • 相关阅读:
    欧拉计划之题目7:找出第10001个质数
    DShow实现一个avi视频的播放(含有个人解释和注释)
    DirectX 9 SDK安装后在vs2010里编译BaseClasses出错问题解决方法
    C#内存占用大量资源的解决办法
    C#读写ini文件操作
    【Java】编程技术经典书籍列表
    【数据库_Mysql】查询当前年份的sql
    【数据库_Mysql】MySQL动态语句 if set choose where foreach trim
    【JavaScript】20款漂亮的css字体
    【数据库_Mysql】<foreach>标签在Mysql中的使用
  • 原文地址:https://www.cnblogs.com/itfenqing/p/6930437.html
Copyright © 2011-2022 走看看