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
ThinkPHP 防止表单重复提交的方法
Aug 08 PHP
请离开include_once和require_once
Jul 18 PHP
php中simplexml_load_string使用实例分享
Feb 13 PHP
ThinkPHP之import方法实例详解
Jun 20 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
Jul 08 PHP
PHP curl 抓取AJAX异步内容示例
Sep 09 PHP
php字符串过滤与替换小结
Jan 26 PHP
php使用正则表达式去掉html中的注释方法
Nov 03 PHP
PHP提取字符串中的手机号正则表达式怎么写
Jul 17 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
Dec 26 PHP
php实现的mongoDB单例模式操作类
Jan 20 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
第九节--绑定
2006/11/16 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
2014/08/08 PHP
php获取POST数据的三种方法实例详解
2016/12/20 PHP
用jquery实现学校的校历(asp.net+jquery ui 1.72)
2010/01/01 Javascript
jquery调用wcf并展示出数据的方法
2011/07/07 Javascript
jQuery AJAX实现调用页面后台方法和web服务定义的方法分享
2012/03/01 Javascript
js/jQuery简单实现选项卡功能
2014/01/02 Javascript
JS实现黑色风格的网页TAB选项卡效果代码
2015/10/09 Javascript
浅析jQuery Ajax通用js封装
2016/06/22 Javascript
javascript prototype原型详解(比较基础)
2016/12/26 Javascript
assert()函数用法总结(推荐)
2017/01/25 Javascript
Bootstrap学习笔记之进度条、媒体对象实例详解
2017/03/09 Javascript
JS仿淘宝搜索框用户输入事件的实现
2017/06/19 Javascript
浅谈react-router@4.0 使用方法和源码分析
2019/06/04 Javascript
Vue 页面权限控制和登陆验证功能的实例代码
2019/06/20 Javascript
es6中reduce的基本使用方法
2019/09/10 Javascript
关于vue路由缓存清除在main.js中的设置
2019/11/06 Javascript
React 条件渲染最佳实践小结(7种)
2020/09/27 Javascript
[04:49]期待西雅图之战 2016国际邀请赛中国区预选赛WINGS战队赛后采访
2016/06/29 DOTA
python实现的各种排序算法代码
2013/03/04 Python
python脚本实现数据导出excel格式的简单方法(推荐)
2016/12/30 Python
python RabbitMQ 使用详细介绍(小结)
2018/11/08 Python
python匿名函数用法实例分析
2019/08/03 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
2019/10/28 Python
python装饰器练习题及答案
2019/11/01 Python
Python库安装速度过慢解决方案
2020/07/14 Python
python实现学生信息管理系统(精简版)
2020/11/27 Python
移动Web—CSS为Retina屏幕替换更高质量的图片
2012/12/24 HTML / CSS
港湾网络笔试题
2014/04/19 面试题
护士实习鉴定范文
2013/12/22 职场文书
思想作风整顿个人剖析材料
2014/10/06 职场文书
长江三峡导游词
2015/01/31 职场文书
如何写辞职信
2015/05/13 职场文书
2015年科学教研组工作总结
2015/07/22 职场文书
员工手册董事长致辞
2015/07/29 职场文书
高通2023 年将发布高性能PC处理器
2022/04/29 数码科技