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获取当前网址url并替换参数或网址的方法
Jun 06 PHP
解析curl提交GET,POST,Cookie的简单方法
Jun 29 PHP
浅谈php和.net的区别
Sep 28 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
Dec 26 PHP
php操作xml入门之xml基本介绍及xml标签元素
Jan 23 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
Jun 20 PHP
PHP实现基于mysqli的Model基类完整实例
Apr 08 PHP
php实现xml与json之间的相互转换功能实例
Jul 07 PHP
Laravel框架Request、Response及Session操作示例
May 06 PHP
Laravel框架实现简单的学生信息管理平台案例
May 07 PHP
php把文件设置为插件的技巧方法
Feb 03 PHP
数据结构之利用PHP实现二分搜索树
Oct 25 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
绿山咖啡和蓝山咖啡
2021/03/04 新手入门
5.PHP的其他功能
2006/10/09 PHP
过滤掉PHP数组中的重复值的实现代码
2011/07/17 PHP
简单实用的.net DataTable导出Execl
2013/10/28 PHP
使用PHP强制下载PDF文件示例
2014/01/17 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
2020/04/27 PHP
改善用户体验的五款jQuery插件分享
2011/05/22 Javascript
js 获取class的元素的方法 以及创建方法getElementsByClassName
2013/03/11 Javascript
document.createElement()用法
2013/03/13 Javascript
Struts2的s:radio标签使用及用jquery添加change事件
2013/04/08 Javascript
JS中批量给元素绑定事件过程中的相关问题使用闭包解决
2013/04/15 Javascript
解析瀑布流布局:JS+绝对定位的实现
2013/05/08 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 简史
2015/01/09 Javascript
JQuery显示隐藏页面元素的方法总结
2015/04/16 Javascript
AngularJs IE Compatibility 兼容老版本IE
2016/09/01 Javascript
ES5学习教程之Array对象
2017/04/01 Javascript
深入理解angular2启动项目步骤
2017/07/15 Javascript
原生JS实现的碰撞检测功能示例
2018/05/18 Javascript
puppeteer实现html截图的示例代码
2019/01/10 Javascript
Javascript的this详解
2019/03/23 Javascript
使用JavaScript实现网页秒表功能(含开始、暂停、继续、重置功能)
2020/06/05 Javascript
JS检测浏览器开发者工具是否打开的方法详解
2020/10/02 Javascript
python3.0 字典key排序
2008/12/24 Python
深入解析Python中的变量和赋值运算符
2015/10/12 Python
Python操作csv文件实例详解
2017/07/31 Python
python实现列表中由数值查到索引的方法
2018/06/27 Python
python二维列表一维列表的互相转换实例
2018/07/02 Python
Python 判断文件或目录是否存在的实例代码
2018/07/19 Python
python卸载后再次安装遇到的问题解决
2019/07/10 Python
New Balance英国官方网站:始于1906年,百年慢跑品牌
2016/12/07 全球购物
Claire’s法国:时尚配饰、美容、珠宝、头发
2021/01/16 全球购物
养殖人员的创业计划书范文
2013/12/26 职场文书
运动会广播稿80字
2014/01/23 职场文书
投资合作协议书范本
2014/04/17 职场文书
外贸会计专业自荐信
2014/06/22 职场文书
初中政教处工作总结
2015/08/12 职场文书