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 ...
随机推荐
- ACdream 1210 Chinese Girls' Amusement(高精度)
Chinese Girls' Amusement Time Limit:1000MS Memory Limit:64000KB 64bit IO Format:%lld & ...
- 给dedeCMS自定义模型添加图片集字段
1.先找到dedecms图片集模型的templets生成图片集的html代码(album_add.htm) <tr> <td height="24" ...
- vs mfc 静态文本 改变字体大小
VC的对话框字体设置对所有控件都有效,你不能单独地改变某个静态文本的字体.对于你的问题,需要首先用CreateFont来建立一个字体对象,然后调用控件的SetFont,就可以了. 例子: 1.改静态文 ...
- linux Centos7 安装Samba服务
1. 使用Samba服务器需要防火墙开放以下端口 UDP 137 UDP 138 TCP 139 TCP 445 如果碰到 “Unable to save xxxxxxxx 拒绝访问” 的提示,还有最 ...
- Fiddler抓包4-工具介绍(request和response)【转载】
本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/p/6719717.html 前言 本篇简单的介绍下fiddler界面的几块区域,以及各自区域到 ...
- J.U.C并发框架源码阅读(五)Semaphore
基于版本jdk1.7.0_80 java.util.concurrent.Semaphore 代码如下 /* * ORACLE PROPRIETARY/CONFIDENTIAL. Use is sub ...
- J.U.C并发框架源码阅读(九)LinkedBlockingQueue
基于版本jdk1.7.0_80 java.util.concurrent.LinkedBlockingQueue 代码如下 /* * ORACLE PROPRIETARY/CONFIDENTIAL. ...
- 链式前向星DFS
本文链接:http://www.cnblogs.com/Ash-ly/p/5399057.html 采用链式前向星存图的DFS: #include <iostream> #include ...
- Python的并发并行[2] -> 队列[0] -> queue 模块
queue 模块 / queue Module 1 常量 / Constants Pass 2 函数 / Function Pass 3 类 / Class 3.1 Queue类 类实例化:queue ...
- [POI2014]Salad Bar
题目大意: 一个长度为$n(n\leq10^6)$的字符串,每一位只会是$p$或$j$.你需要取出一个子串$S$(从左到右或从右到左一个一个取出),使得不管是从左往右还是从右往左取,都保证每时每刻已取 ...