• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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);
    }

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

    总结

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

    您可能感兴趣的文章:
    • Laravel框架源码解析之入口文件原理分析
    • Laravel框架源码解析之反射的使用详解
    • Laravel源码解析之路由的使用和示例详解
    • 通过源码解析Laravel的依赖注入
    • Laravel框架学习笔记(二)项目实战之模型(Models)
    • laravel model模型定义实现开启自动管理时间created_at,updated_at
    • laravel model模型处理之修改查询或修改字段时的类型格式案例
    • Laravel5.1 框架模型工厂ModelFactory用法实例分析
    • Laravel 5框架学习之模型、控制器、视图基础流程
    • Laravel模型事件的实现原理详解
    • laravel学习教程之关联模型
    • Laravel框架源码解析之模型Model原理与用法解析
    上一篇:PHP排序算法之基数排序(Radix Sort)实例详解
    下一篇:PHP排序算法之快速排序(Quick Sort)及其优化算法详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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