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开发者事半功倍的十大技巧小结
Apr 20 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
Apr 28 PHP
编写Smarty插件在模板中直接加载数据的详细介绍
Jun 26 PHP
php实现下载限制速度示例分享
Feb 13 PHP
php使用codebase生成随机数
Mar 25 PHP
php中cookie的使用方法
Mar 29 PHP
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
Jan 22 PHP
WordPress开发中短代码的实现及相关函数使用技巧
Jan 05 PHP
PHP中静态变量的使用方法实例分析
Dec 01 PHP
PHP设计模式之原型模式定义与用法详解
Apr 03 PHP
PHP全局使用Laravel辅助函数dd
Dec 26 PHP
php数组指针函数功能及用法示例
Feb 11 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笔记之常用文件操作
2010/10/12 PHP
php禁用函数设置及查看方法详解
2016/07/25 PHP
thinkPHP5框架中widget的功能与用法详解
2018/06/11 PHP
图标线性回归斜着移动到指定的位置
2013/08/16 Javascript
JS中实现简单Formatter函数示例代码
2014/08/19 Javascript
javascript实现自动填写表单实例简析
2015/12/02 Javascript
TypeScript学习之强制类型的转换
2016/12/27 Javascript
ES6新特性六:promise对象实例详解
2017/04/21 Javascript
微信小程序之网络请求简单封装实例详解
2017/06/28 Javascript
vue2.0 axios前后端数据处理实例代码
2017/06/30 Javascript
Vue组件通信实践记录(推荐)
2017/08/15 Javascript
Vue自定义事件(详解)
2017/08/19 Javascript
原生js封装的ajax方法示例
2018/08/02 Javascript
webpack4 入门最简单的例子介绍
2018/09/05 Javascript
微信小程序实现选项卡效果
2018/11/06 Javascript
详解VUE Element-UI多级菜单动态渲染的组件
2019/04/25 Javascript
[03:37]2015国际邀请赛第四日现场精彩集锦
2015/08/08 DOTA
python读取注册表中值的方法
2013/04/08 Python
python字符串替换示例
2014/04/24 Python
Python编程中使用Pillow来处理图像的基础教程
2015/11/20 Python
解决python3中的requests解析中文页面出现乱码问题
2019/04/19 Python
python logging设置level失败的解决方法
2020/02/19 Python
python使用pyecharts库画地图数据可视化的实现
2020/03/25 Python
Python+OpenCV图像处理——图像二值化的实现
2020/10/24 Python
python3 通过 pybind11 使用Eigen加速代码的步骤详解
2020/12/07 Python
HTML5 Canvas+JS控制电脑或手机上的摄像头实例
2014/05/03 HTML / CSS
JD Sports瑞典:英国领先的运动时尚商店
2018/01/28 全球购物
幼儿园消防安全制度
2014/01/26 职场文书
企业挂职心得体会
2014/09/10 职场文书
婚前协议书标准版
2014/10/19 职场文书
机关党员四风问题个人整改措施
2014/10/26 职场文书
员工福利申请报告
2015/05/15 职场文书
如何写新闻稿
2015/07/18 职场文书
2016党员党课心得体会
2016/01/07 职场文书
Nebula Graph解决风控业务实践
2022/03/31 MySQL
电脑开机弹出documents文件夹怎么回事?弹出documents文件夹解决方法
2022/04/08 数码科技