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 相关文章推荐
php二分法在IP地址查询中的应用
Aug 12 PHP
PHP5 操作MySQL数据库基础代码
Sep 29 PHP
php cookies中删除的一般赋值方法
May 07 PHP
PHP中source #N问题的解决方法
Jan 27 PHP
PHP实现生成唯一编号(36进制的不重复编号)
Jul 01 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
Apr 21 PHP
PHP实现事件机制实例分析
Jun 26 PHP
Symfony实现行为和模板中取得request参数的方法
Mar 17 PHP
PHP list() 将数组中的值赋给变量的简单实例
Jun 13 PHP
简单谈谈PHP面向对象之标识对象
Jun 27 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 PHP
PHP框架实现WebSocket在线聊天通讯系统
Nov 21 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
php 二维数组时间排序实现代码
2016/11/19 PHP
两个SUBMIT按钮,如何区分处理
2006/08/22 Javascript
使用jscript实现二进制读写脚本代码
2008/06/09 Javascript
javascript new 需不需要继续使用
2009/07/02 Javascript
JavaScript高级程序设计 学习笔记 js高级技巧
2011/09/20 Javascript
用javascript添加控件自定义属性解析
2013/11/25 Javascript
jQuery中live()方法用法实例
2015/01/19 Javascript
javascript和jquery实现用户登录验证
2016/05/04 Javascript
概述如何实现一个简单的浏览器端js模块加载器
2016/12/07 Javascript
JS百度地图搜索悬浮窗功能
2017/01/12 Javascript
webpack独立打包和缓存处理详解
2017/04/03 Javascript
微信小程序 跳转传递数据的实例
2017/07/06 Javascript
前端性能优化建议
2020/09/17 Javascript
.netcore+vue 实现压缩文件下载功能
2020/09/24 Javascript
[41:52]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第二场 2月22日
2021/03/11 DOTA
跟老齐学Python之print详解
2014/09/28 Python
使用Python装饰器在Django框架下去除冗余代码的教程
2015/04/16 Python
python字符串的常用操作方法小结
2016/05/21 Python
详解Python中的type和object
2018/08/15 Python
对python中不同模块(函数、类、变量)的调用详解
2019/07/16 Python
Python中typing模块与类型注解的使用方法
2019/08/05 Python
python中enumerate() 与zip()函数的使用比较实例分析
2019/09/03 Python
python tornado使用流生成图片的例子
2019/11/18 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
2020/06/08 Python
CSS3中31种选择器使用方法教程
2013/12/05 HTML / CSS
美国钻石商店:Zales
2016/11/20 全球购物
苹果Mac升级:MacSales.com
2017/11/20 全球购物
印度尼西亚最好的小工具在线商店:Erafone.com
2019/03/26 全球购物
物流经理自我评价
2013/09/23 职场文书
群众路线教育实践活动方案
2014/02/02 职场文书
2014年祖国生日寄语
2014/09/19 职场文书
中学生检讨书范文
2014/11/03 职场文书
优秀团员自我评价
2015/03/10 职场文书
Pytorch 实现变量类型转换
2021/05/17 Python
厉害!这是Redis可视化工具最全的横向评测
2021/07/15 Redis
ubuntu开机后ROS程序自启动问题
2022/12/24 Servers