Laravel模型间关系设置分表的方法示例
发布:smiling 来源: PHP粉丝网 添加日期:2021-09-11 11:06:11 浏览: 评论:0
这篇文章主要给大家介绍了关于Laravel模型间关系设置分表的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
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);
- }
不知道大家有没有更优雅的方式。
Tags: Laravel模型 Laravel设置分表
- 上一篇:Laravel 加载第三方类库的方法
- 下一篇:Yii2框架类自动加载机制实例分析
相关文章
- ·Laravel模型事件的实现原理详解(2021-09-05)
- ·Laravel框架模型的创建及模型对数据操作示例(2021-11-21)
- ·Laravel 模型关联基础教程详解(2021-12-18)
- ·解决laravel id非自增 模型取回为0 的问题(2021-12-31)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)