Laravel之Eloquent ORM访问器调整器及属性转换
一.查询构建器的get方法
查询构建器的get方法返回了一个集合 $users = App\User::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 = App\User::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 = App\User::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 = App\User::find(1);
$user->disabled_at = Carbon::now();
$user->save(); 正如上面提到的,当获取被罗列在$dates 数组中的属性时,它们会被自动转化为Carbon 实例,允许你在属性上使用任何Carbon 的方法:
$user = App\User::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 = App\User::find(1);
$options = $user->options;
$options['key'] = 'value';
$user->options = $options;
$user->save(); 五.序列化 1.转化模型/集合为数组
$user = App\User::with('roles')->first();
return $user->toArray(); $users = App\User::all();
return $users->toArray(); 2.转化模型为 JSON
$user = App\User::find(1);
return $user->toJson(); 3.转为字符串
$user = App\User::find(1);
return (string) $user; 转换后的格式如下:
{"id":1,"user_id":1,"name":"\u6700\u65b0\u6d4b\u8bd5","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';
}
}
Laravel之Eloquent ORM访问器调整器及属性转换的更多相关文章
- laravel通过Eloquent ORM实现CURD
//Eloquent ORM public function orm1() { //all(); 返回所有数据: /*$students=Student::all(); dd($students);* ...
- Laravel之Eloquent ORM
一.ORM编程思想 1.1 Active Record 设计模式 Active Record 是一种数据访问设计模式,它可以帮助你实现数据对象Object到关系数据库的映射.应用Active Reco ...
- Laravel使用Eloquent ORM操作数据库
1.定义模型 <?php namespace App; use Illuminate\Database\Eloquent\Model; class Flight extends Model{ p ...
- Laravel之Eloquent ORM关联
一.一对一 1.主对从(hasOne) 从User模型中取出用户的手机 User模型中: /** * 获取关联到用户的手机 */ public function phone() { return $t ...
- laravel 5.1 使用Eloquent ORM 操作实例
Laravel 的 Eloquent ORM 提供了更优雅的ActiveRecord 实现来和数据库的互动. 每个数据库表对应一个模型文件. 数据库配置 .env文件(也可以直接修改config/da ...
- Laravel Eloquent ORM
Eloquent ORM 简介 基本用法 集体赋值 插入.更新.删除 软删除 时间戳 查询范围 关系 查询关系 预先加载 插入相关模型 触发父模型时间戳 与数据透视表工作 集合 访问器和调整器 日期调 ...
- [转]Laravel 4之Eloquent ORM
Laravel 4之Eloquent ORM http://dingjiannan.com/2013/laravel-eloquent/ 定义Eloquent模型 模型通常放在app/models目录 ...
- [Laravel] 03 - DB facade, Query builder & Eloquent ORM
连接数据库 一.Outline 三种操作数据库的方式. 二.Facade(外观)模式 Ref: 解读Laravel,看PHP如何实现Facade? Facade本质上是一个“把工作推给别人做的”的类. ...
- Laravel 数据库操作 Eloquent ORM
laravel 操作数据库一般都使用它的Eloquent ORM才操作 建立模型 <?php namespace App; use Illuminate\Database\Eloquent\Mo ...
随机推荐
- 关于try-catch-finally return 的面试题
public class Test { public static void main(String[] args) { System.out.println(test()); } static in ...
- linq使用 count与sum等
using System; using System.Data; using System.Configuration; using System.Linq; using System.Web; us ...
- shell 将字符串分割成数组
代码:test.sh #!/bin/bash a="one,two,three,four" #要将$a分割开,可以这样: OLD_IFS="$IFS" IFS= ...
- 嵌入式Linux下Camera编程--V4L2【转】
转自:http://blog.csdn.net/fwqlzz/article/details/51126653 版权声明:本文为博主原创文章,未经博主允许不得转载. USB video class(又 ...
- entitymanager 进行数据序列化
场景:同一个方法里,需要将前一部分执行的数据保存到数据库.后半部分读取数据时从数据库里获取,而不是获取到缓存里的数据. 理解eneityManager的这三个方法的作用和区别,首先需要分清楚Persi ...
- Python开发【项目】:FTP程序
作业:开发一个支持多用户在线的FTP程序 要求: 用户加密认证 允许同时多用户登录 每个用户有自己的家目录 ,且只能访问自己的家目录 对用户进行磁盘配额,每个用户的可用空间不同 允许用户在ftp se ...
- python笔记-冒泡排序【转载】
本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/python/ 前言 面试的时候经常有面试官喜欢问如何进行冒泡排序?这个问题相信能难倒一 ...
- 处理下最近的file_id小写问题
update t_resource_info set FILE_ID = UPPER(FILE_ID);update t_resource_my_info set FILE_ID = UPPER(FI ...
- URl 传参时+号变成空格
前端用base64加密后的数据,传递到后台时发现一个问题: 比如 韩飞 这个名字,base64加密后的字符串为 6Z+p6aOe 但是后端接受到参数为: 6Z p6aOe +号变成了空格,导致后台解密 ...
- TestList汇总
[基本类型] 类的构造方法调用问题 重载复写的区别 Final finally finalized 的区别 定义final变量是否需要初始化 forward和redirect的区别 equals方法和 ...