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 相关文章推荐
一个很方便的 XML 类!!原创的噢
Oct 09 PHP
简单的PHP图片上传程序
Mar 27 PHP
Ajax PHP简单入门教程代码
Apr 25 PHP
PHP读取MySQL数据代码
Jun 05 PHP
php内核解析:PHP中的哈希表
Jan 30 PHP
php中socket通信机制实例详解
Jan 03 PHP
php简单防盗链实现方法
Jul 29 PHP
Zend Framework入门教程之Zend_Session会话操作详解
Dec 08 PHP
php的4种常用运行方式详解
Dec 22 PHP
php爬取天猫和淘宝商品数据
Feb 23 PHP
php获取目录下所有文件及目录(多种方法)(推荐)
May 14 PHP
Memcached介绍及php-memcache扩展安装
Apr 01 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+MYSQL的文章管理系统(一)
2006/10/09 PHP
PHP 获取远程文件内容的函数代码
2010/03/24 PHP
php中读写文件与读写数据库的效率比较分享
2013/10/19 PHP
jQuery Pagination Ajax分页插件(分页切换时无刷新与延迟)中文翻译版
2013/01/11 Javascript
JQuery使用$.ajax和checkbox实现下次不在通知功能
2015/04/16 Javascript
javascript数组排序汇总
2015/07/07 Javascript
jQuery Validation Plugin验证插件手动验证
2016/01/26 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
2016/07/05 Javascript
angular中使用Socket.io实例代码
2017/06/03 Javascript
js实现旋转的星空效果
2019/11/01 Javascript
jquery实现弹窗(系统提示框)效果
2019/12/10 jQuery
node创建Vue项目步骤详解
2020/03/06 Javascript
EXTJS7实现点击拖拉选择文本
2020/12/17 Javascript
Python字符转换
2008/09/06 Python
Python中的类学习笔记
2014/09/23 Python
python 3.6 tkinter+urllib+json实现火车车次信息查询功能
2017/12/20 Python
Python实现生成随机日期字符串的方法示例
2017/12/25 Python
python实现远程通过网络邮件控制计算机重启或关机
2018/02/22 Python
Python2包含中文报错的解决方法
2018/07/09 Python
python画图——实现在图上标注上具体数值的方法
2019/07/08 Python
Python 解析简单的XML数据
2020/07/24 Python
Python2.6版本pip安装步骤解析
2020/08/17 Python
CSS3 media queries + jQuery实现响应式导航
2016/09/30 HTML / CSS
英国领先的票务代理商之一:The Ticket Factory
2019/02/09 全球购物
高级Java程序员面试要点
2013/08/02 面试题
2014全国两会学习心得体会2000字
2014/03/10 职场文书
市场总经理岗位职责
2014/04/11 职场文书
材料成型及控制工程专业求职信
2014/06/19 职场文书
县委常委班子专题民主生活会查摆问题及整改措施
2014/09/27 职场文书
2014年底工作总结
2014/12/15 职场文书
装饰施工员岗位职责
2015/04/11 职场文书
2016年学校“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
教你怎么用Python实现多路径迷宫
2021/04/29 Python
python脚本框架webpy模板赋值实现
2021/11/20 Python
SQL注入篇学习之盲注/宽字节注入
2022/03/03 MySQL
世界十大狙击步枪排行榜
2022/03/20 杂记