服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服务器之家 - 编程语言 - PHP教程 - Laravel模型间关系设置分表的方法示例

Laravel模型间关系设置分表的方法示例

2019-10-11 11:26小谈 PHP教程

这篇文章主要给大家介绍了关于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);
}

不知道大家有没有更优雅的方式。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。

延伸 · 阅读

精彩推荐
  • PHP教程PHP addslashes()函数讲解

    PHP addslashes()函数讲解

    今天小编就为大家分享一篇关于PHP addslashes()函数讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    php参考手册2652019-06-19
  • PHP教程PHP实现的超长文本分页显示功能示例

    PHP实现的超长文本分页显示功能示例

    这篇文章主要介绍了PHP实现的超长文本分页显示功能,涉及php针对字符串的计算、截取、遍历等相关操作技巧,可实现针对超长文本的分页显示功能,需要的朋...

    chengqiuming3042019-09-28
  • PHP教程Thinkphp5框架ajax接口实现方法分析

    Thinkphp5框架ajax接口实现方法分析

    这篇文章主要介绍了Thinkphp5框架ajax接口实现方法,结合实例形式分析了thinkPHP5 ajax交互相关操作技巧,需要的朋友可以参考下...

    zhensg3452019-08-28
  • PHP教程Laravel框架FormRequest中重写错误处理的方法

    Laravel框架FormRequest中重写错误处理的方法

    这篇文章主要介绍了Laravel框架FormRequest中重写错误处理的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    zx3032019-06-11
  • PHP教程php5.x禁用eval的操作方法

    php5.x禁用eval的操作方法

    这篇文章主要介绍了php5.x禁用eval的操作方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下...

    运维4062019-08-31
  • PHP教程php断点续传之文件分割合并详解

    php断点续传之文件分割合并详解

    这篇文章主要为大家详细介绍了php断点续传之文件分割合并,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    _xiaoxiong1322019-09-08
  • PHP教程Laravel 集成 Geetest验证码的方法

    Laravel 集成 Geetest验证码的方法

    这篇文章主要介绍了Laravel 集成 Geetest验证码的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    那就远走2562019-10-07
  • PHP教程微信企业转账之入口类分装php代码

    微信企业转账之入口类分装php代码

    这篇文章主要为大家详细介绍了微信企业转账之入口类分装php代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    躬行者1592019-09-04