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 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释
Mar 23 PHP
PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
Nov 10 PHP
用PHP实现小写金额转换大写金额的代码(精确到分)
Jan 10 PHP
PHP合并静态文件详解
Nov 14 PHP
thinkphp连贯操作实例分析
Nov 22 PHP
phpmailer绑定邮箱的实现方法
Dec 01 PHP
YII2 实现多语言配置的方法分享
Jan 11 PHP
thinkPHP5.0框架模块设计详解
Mar 18 PHP
yii2.0整合阿里云oss上传单个文件的示例
Sep 19 PHP
php pdo连接数据库操作示例
Nov 18 PHP
Laravel + Elasticsearch 实现中文搜索的方法
Feb 02 PHP
Yii框架组件的事件机制原理与用法分析
Apr 07 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之Smarty入门
2007/01/04 PHP
PHP的变量总结 新手推荐
2011/04/18 PHP
浅析HTTP消息头网页缓存控制以及header常用指令介绍
2013/06/28 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
2013/09/28 PHP
在js中单选框和复选框获取值的方式
2009/11/06 Javascript
javascript标签在页面中的位置探讨
2013/04/11 Javascript
js的正则test,match,exec详细解析
2014/01/29 Javascript
js实现同一页面多个不同运动效果的方法
2015/04/10 Javascript
微信小程序 canvas API详解及实例代码
2016/10/08 Javascript
JavaScript 栈的详解及实例代码
2017/01/22 Javascript
JavaScript制作简单的框选图表
2017/05/15 Javascript
认识jQuery的Promise的具体使用方法
2017/10/10 jQuery
JS简单实现滑动加载数据的方法示例
2017/10/18 Javascript
详解基于Koa2开发微信二维码扫码支付相关流程
2018/05/16 Javascript
微信小程序实现星级评价效果
2018/12/28 Javascript
ionic2.0双击返回键退出应用
2019/09/17 Javascript
Javascript类型判断相关例题及解析
2020/08/26 Javascript
JavaScript通如何过RGraph实现动态仪表盘
2020/10/15 Javascript
Python3实现生成随机密码的方法
2014/08/23 Python
讲解Python中的递归函数
2015/04/27 Python
Python实现统计代码行的方法分析
2017/07/12 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
2018/07/07 Python
Levi’s西班牙官方网站:李维斯,著名的牛仔裤品牌
2020/08/20 全球购物
声明struct x1 { . . . }; 和typedef struct { . . . }x2;有什么不同
2012/06/02 面试题
人力资源专员自我评价怎么写
2013/09/19 职场文书
通信专业个人自我鉴定
2013/10/21 职场文书
初中生物教学反思
2014/01/10 职场文书
单身联谊活动方案
2014/01/29 职场文书
数学高效课堂实施方案
2014/03/29 职场文书
房产转让协议书
2014/04/11 职场文书
初中学生评语大全
2014/04/24 职场文书
教师批评与自我批评发言稿
2014/10/15 职场文书
2015年民主生活会发言材料
2014/12/15 职场文书
优秀小学生事迹材料
2014/12/26 职场文书
python中pandas.read_csv()函数的深入讲解
2021/03/29 Python
苹果M1芯片安装nginx 并且部署vue项目步骤详解
2021/11/20 Servers