Eloquent ORM模型中添加自定义值
我们都知道通过Laravel中数据库查询出来的模型对象都是基于数据库字段,今天给大家展示一个 Laravel Eloquent ORM 模型特性-附加值不存在于数据表中。
举个简单的栗子,一篇文章(posts表)对应有很多评论(comments表),我们获取文章的同时需要获取评论数量。通常的做法就是根据 ORM 的关联关系,获取评论数量:$post->comments()->count() 。
如果获取的是一个文章列表,那么最直接的办法就是 froeach 查询出来的文章,然后每篇文章获取评论数量;另外一种做法就是用 with 然后在闭包里面实现评论数量,至于怎么实现,我就不详细介绍了。Laravel 提供了一种更优雅的方式。
关联关系
class Post extends Model
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['title', 'text']; /**
* 文章对应多条评论
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function comments()
{
return $this->hasMany(Comment::class);
}
}
上面代码没有什么特殊的,只是先声明一下关联关系,接下来会使用。接下来创建一个访问器,如果你还不清楚访问器是什么,建议你看一下Laravel官方文档:https://laravel.com/docs/5.3/eloquent-mutators
创建访问器
public function getCountCommentsAttribute()
{
return $this->comments()->count();
}
这里的
getCountCommentsAttribute方法名中get和Attribute是固定写法,真正在模型中的名称是由CountComments决定,命名一般是驼峰写法,一个单词时在ORM模型中就是那个单词的小写,如果像CountComments这种方式在ORM模型会转化为count_comments
创建访问器后,我们获取数据的时候 ORM 模型中并没有这个属性,因为Laravel并不会默认加上访问器的属性。
添加属性到ORM模型中
我们现在要做的很简单,我们想要在 ORM模型中获取到 count_comments 。只用简单的在 $appends 数组中添加属性名。
protected $appends = ['count_comments'];
OK,That was all!
简单的测试截图:

查询出来的ORM中可以看到 appends 里面添加了 count_comments 属性。把这个 ORM 模型进行 toArray() 的时候机构就更加清晰了:

更多用法和扩展根据大家需要来就行了,这里只做一个抛砖引玉。这个知识点看到国外文章,需要翻墙,我就不贴出来了。
转载自: http://blog.iwanli.me/article/zg36G9Yd.html
Eloquent ORM模型中添加自定义值的更多相关文章
- Laravel 数据库操作之Eloquent ORM模型
//模型中的相关代码 namespace App; use Illuminate\Database\Eloquent\Model; class Student extends Model{ //默认对 ...
- osg 在fbx模型中添加自定义节点
- SQLAlchemy01 /SQLAlchemy去连接数据库、ORM介绍、将ORM模型映射到数据库中
SQLAlchemy01 /SQLAlchemy去连接数据库.ORM介绍.将ORM模型映射到数据库中 目录 SQLAlchemy01 /SQLAlchemy去连接数据库.ORM介绍.将ORM模型映射到 ...
- SQLAlchemy(一):SQLAlchemy去连接数据库、ORM介绍、将ORM模型映射到数据库中
SQLAlchemy01 /SQLAlchemy去连接数据库.ORM介绍.将ORM模型映射到数据库中 目录 SQLAlchemy01 /SQLAlchemy去连接数据库.ORM介绍.将ORM模型映射到 ...
- Eloquent ORM笔记
基本操作 新增 $user = new User; $user->name = 'John'; $user->save(); $insertedId = $user->id;//从对 ...
- [Laravel] 03 - DB facade, Query builder & Eloquent ORM
连接数据库 一.Outline 三种操作数据库的方式. 二.Facade(外观)模式 Ref: 解读Laravel,看PHP如何实现Facade? Facade本质上是一个“把工作推给别人做的”的类. ...
- Python的自定义属性访问跟描述器以及ORM模型的简单介绍
一 . 自定义属性访问 1.__getattr__ 作用:当我们访问属性的时候,如果属性不存在(出现AttrError),该方法会被触发. 2.__getattribute__ 作用:访问属性的时候, ...
- 三十:数据库之定义ORM模型,并映射到数据库
连接数据库操作 sqlalchemy映射步骤: 1.创建ORM模型,这个模型必须继承sqlalchemy提供的基类2.在这个ORM模型中创建一些属性,与表中的字段一一映射,这些属性必须是sqlalch ...
- laravel Eloquent ORM联合查询出现Class not found,就算在Moel中存在这个类
今天发现一个坑,在处理Eloquent ORM的联合查询时,一直报错Class 'AdminGroup' not found ,可是我的项目中明明存在这个类,如下 这是我的模型类: 它们的控制器方法: ...
随机推荐
- js替换字符串中的数字或非数字
替换字符串中的数字 var text = "abc123"; text=text.replace(/[0-9]/ig,""); 此时得到的text为" ...
- lua 写逻辑打印log时,打印到一半后停止不再打印,程序停止
问题描述:ubuntu下用lua开发游戏电子邮件模块,自己测试时向用户推送100封,而用户最多只能有50封.这是调用sysdelete删除一些邮件.当打印log时,打印到一半后程序中途停止.将打印lo ...
- elasticsearch中filter执行原理深度剖析(bitset机制与caching机制)
(1)在倒排索引中查找搜索串,获取document list date来举例 word doc1 doc2 doc3 2017-01-01 * *2017-02-02 * *2017-03-03 ...
- Spring初学之注解方式配置bean
直接看代码: UserController.java package spring.beans.annotation.controller; import org.springframework.be ...
- javascript(jquery)_匿名函数
一.什么是匿名函数 匿名函数:就是没有函数名的函数 二.为什么使用匿名函数 1.最大的用处就是创建闭包 三.匿名函数定义(怎么使用匿名函数) 1.这种方法使用了Function构造函数,把参数列表和函 ...
- 转:Android命令Monkey压力测试,详解
停止Monkey命令: 1. ps命令 查找uiautomator的进程 打开cmd命令行窗口 输入: adb shell ps | grep monkey 返回来的第一个数字,即是monkey的进 ...
- sql中的group by 和 having 用法
sql中的group by 用法:-- Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”.--它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然 ...
- pandas 读取excel的指定列
不管对于read_csv还是read_excel,现在都有: usecols : int or list, default None If None then parse all columns, I ...
- java文件读写常用方法
// TODO Auto-generated method stub //File file = new File("D:\\Android\\workspace\\Practice1\\s ...
- 设计高效sql一般经验谈
1不用在sql语句使用系统默认的保留关键字 2尽量用exists 和 not exists 代替 in 和 not in 这条在sql2005之后,在索引一样,统计信息一样的情况下,exists ...