Laravel模型间关系设置分表的方法示例


Posted in PHP onApril 21, 2018

Eloquent是什么

Eloquent 是一个 ORM,全称为 Object Relational Mapping,翻译为 “对象关系映射”(如果只把它当成 Database Abstraction Layer 数组库抽象层那就太小看它了)。所谓 “对象”,就是本文所说的 “模型(Model)”;对象关系映射,即为模型间关系。中文文档: http://laravel-china.org/docs/eloquent#relationships

引用

在实际开发中经常用到分库分表,比如用户表分成 100 张,那么这个时候查询数据需要设置分表,比如 Laravel 的 Model 类中提供了 setTable 方法:

/**
 * Set the table associated with the model.
 *
 * @param string $table
 * @return $this
 */
public function setTable($table)
{
 $this->table = $table;
 
 return $this;
}

那么对数据表的增删改查需要先 new 一个模型实例,再设置表名。如:

(new Circle())->setTable("t_group_" . hashID($userid, 20))
->newQuery()
->where('group_id', $request->group_id)
->update($attributes);

这个很简单,那么在模型间关系比如 HasOne,HasMany 等使用这种方式的情况下,如何设置分表呢?

找了半天没找到好的办法,以 HasOne 为例,看了 Model 类 HasOne 函数的实现方法,没有地方可以设置表名,只好复制一份 HasOne 方法进行修改。比如改成 myHasOne,加上 $table 参数可以设置表名,并且在对象实例化后调用 setTable,果然就可以了。

代码如下:

public function detail()
{
 return $this->myHasOne(Circle::class, 'group_id', 'group_id', 't_group_' . hashID($this->userid, 20));
}
 
public function myHasOne($related, $foreignKey = null, $localKey = null, $table)
{
 $foreignKey = $foreignKey ?: $this->getForeignKey();
 
 $instance = (new $related)->setTable($table);
 
 $localKey = $localKey ?: $this->getKeyName();
 
 return new HasOne($instance->newQuery(), $this, $instance->getTable() . '.' . $foreignKey, $localKey);
}

不知道大家有没有更优雅的方式。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
自己前几天写的无限分类类
Feb 14 PHP
PHP 获取目录下的图片并随机显示的代码
Dec 28 PHP
PHP中的替代语法简介
Aug 22 PHP
set_exception_handler函数在ThinkPHP中的用法
Oct 31 PHP
php格式化日期实例分析
Nov 12 PHP
thinkphp中memcache的用法实例
Nov 29 PHP
PHP中把有符号整型转换为无符号整型方法
May 27 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
Jan 18 PHP
谈谈PHP连接Access数据库的注意事项
Aug 12 PHP
PHP多种序列化/反序列化的方法详解
Jun 23 PHP
PHP文件系统管理(实例讲解)
Sep 19 PHP
PHP实现的ID混淆算法类与用法示例
Aug 10 PHP
PHP排序算法之基数排序(Radix Sort)实例详解
Apr 21 #PHP
PHP排序算法之堆排序(Heap Sort)实例详解
Apr 21 #PHP
PHP实现Huffman编码/解码的示例代码
Apr 20 #PHP
PHP排序算法之希尔排序(Shell Sort)实例分析
Apr 20 #PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
Apr 20 #PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
Apr 20 #PHP
PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
Apr 20 #PHP
You might like
解析CI即CodeIgniter框架在Nginx下的重写规则
2013/06/03 PHP
thinkPHP5.0框架环境变量配置方法
2017/03/17 PHP
JavaScript中使用正则匹配多条,且获取每条中的分组数据
2010/11/30 Javascript
jQuery 操作option的实现代码
2011/03/03 Javascript
js中substring和substr的定义和用法
2014/05/05 Javascript
javascript实时获取鼠标坐标值并显示的方法
2015/04/30 Javascript
简介JavaScript中toTimeString()方法的使用
2015/06/12 Javascript
JavaScript中数据结构与算法(一):栈
2015/06/19 Javascript
简单谈谈javascript Date类型
2015/09/06 Javascript
JS模拟bootstrap下拉菜单效果实例
2016/06/17 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
js中的触发事件对象event.srcElement与event.target详解
2017/03/15 Javascript
详解HTTPS 的原理和 NodeJS 的实现
2017/07/04 NodeJs
原生JS实现ajax与ajax的跨域请求实例
2017/12/01 Javascript
深入浅析Vue中的Prop
2018/06/10 Javascript
vue实现div拖拽互换位置
2020/07/29 Javascript
JS获取月的第几周和年的第几周实例代码
2018/12/05 Javascript
vue实现Input输入框模糊查询方法
2021/01/29 Javascript
[30:37]【全国守擂赛】第三周擂主赛 Dark Knight vs. Leopard Gaming
2020/05/04 DOTA
动态创建类实例代码
2009/10/07 Python
介绍Python中的__future__模块
2015/04/27 Python
Python编程pygame模块实现移动的小车示例代码
2018/01/03 Python
python字符串和常用数据结构知识总结
2019/05/21 Python
django之导入并执行自定义的函数模块图解
2020/04/01 Python
3分钟看懂Python后端必须知道的Django的信号机制
2020/07/26 Python
基于Django集成CAS实现流程详解
2020/11/28 Python
英国假睫毛购买网站:FalseEyelashes.co.uk
2018/05/23 全球购物
会议邀请函范文
2014/01/09 职场文书
优秀大学生事迹材料
2014/12/24 职场文书
寒假生活随笔
2015/08/15 职场文书
2016年心理学教育培训学习心得体会
2016/01/12 职场文书
2019年行政人事个人工作总结范本!
2019/07/19 职场文书
帮你提高开发效率的JavaScript20个技巧
2021/06/18 Javascript
vue使用wavesurfer.js解决音频可视化播放问题
2022/04/04 Vue.js
Mysql中的触发器定义及语法介绍
2022/06/25 MySQL
postgresql之greenplum字符串去重拼接方式
2023/05/08 PostgreSQL