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发电子邮件
Oct 09 PHP
PHP安装攻略:常见问题解答(三)
Oct 09 PHP
在数据量大(超过10万)的情况下
Jan 15 PHP
解析PHP中empty is_null和isset的测试
Jun 29 PHP
PHP限制页面只能在微信自带浏览器访问的代码
Jan 15 PHP
PHP、Nginx、Apache中禁止网页被iframe引用的方法
Oct 01 PHP
PHP答题类应用接口实例
Feb 09 PHP
详解PHP中的Traits
Jul 29 PHP
php处理静态页面:页面设置缓存时间实例
Jun 22 PHP
PHP简单实现二维数组赋值与遍历功能示例
Oct 19 PHP
PHP输出Excel PHPExcel的方法
Jul 26 PHP
详解php中curl返回false的解决办法
Mar 18 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桌面中心(四) 数据显示
2007/03/11 PHP
自动生成文章摘要的代码[PHP 版本]
2007/03/20 PHP
浅谈PHP 闭包特性在实际应用中的问题
2009/10/30 PHP
PHP 异步执行方法,模拟多线程的应用分析
2013/06/03 PHP
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
2014/06/26 PHP
使javascript也能包含文件
2006/10/26 Javascript
javascript 鼠标拖动图标技术
2010/02/07 Javascript
contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2011/09/13 Javascript
选择复选框按钮置灰否则按钮可用
2014/05/22 Javascript
JavaScript基于setTimeout实现计数的方法
2015/05/08 Javascript
javascript实现tab切换的两个实例
2015/11/05 Javascript
JavaScript通过代码调用Flash显示的方法
2016/02/02 Javascript
基于JavaScript代码实现自动生成表格
2016/06/15 Javascript
jquery实用技巧之输入框提示语句
2016/07/28 Javascript
bootstrapValidator.min.js表单验证插件
2017/02/09 Javascript
VUE元素的隐藏和显示(v-show指令)
2017/06/23 Javascript
Django中使用jquery的ajax进行数据交互的实例代码
2017/10/15 jQuery
js构建二叉树进行数值数组的去重与优化详解
2018/03/26 Javascript
微信小程序自定义组件传值 页面和组件相互传数据操作示例
2019/05/05 Javascript
详解小程序云开发数据库
2019/05/20 Javascript
js对象数组和对象的使用实例详解
2019/08/27 Javascript
vue.js实现图书管理功能
2019/09/24 Javascript
实例讲解React 组件生命周期
2020/07/08 Javascript
在Python中使用NLTK库实现对词干的提取的教程
2015/04/08 Python
Python的Django框架可适配的各种数据库介绍
2015/07/15 Python
python 转换 Javascript %u 字符串为python unicode的代码
2016/09/06 Python
Python实现桶排序与快速排序算法结合应用示例
2017/11/22 Python
python更改已存在excel文件的方法
2018/05/03 Python
python时间序列按频率生成日期的方法
2019/05/14 Python
Python中random模块常用方法的使用教程
2020/10/04 Python
浅谈Selenium 控制浏览器的常用方法
2020/12/04 Python
会计专业自荐信范文
2013/12/02 职场文书
历史学专业求职信
2014/06/19 职场文书
2014年村委会工作总结
2014/11/24 职场文书
sql server 累计求和实现代码
2022/02/28 SQL Server
Java后端 Dubbo retries 超时重试机制的解决方案
2022/04/14 Java/Android