资讯专栏INFORMATION COLUMN

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

syoya / 3372人阅读

摘要:如这个很简单,那么在模型间关系比如,等使用这种方式的情况下,如何设置分表呢找了半天没找到好的办法,以为例,只好复制类中的方法,改成,并传入表名,并且在函数里对象实例化后调用,果然可以。

在实际开发中经常用到分库分表,比如用户表分成 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 方法,改成 myHasOne,并传入表名,并且在函数里对象实例化后调用 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);
}

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

(原文地址:https://blog.tanteng.me/2018/...)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28628.html

相关文章

  • 首发,laravel最优雅的分表、关联、分页查询,手册方法的熟练运用。

    摘要:前几天写了一遍关于分表关联的查询,但是我个人觉得还不算完美,于是今天重新看了一下模型的底层代码,终于写出我暂时觉得最满意的代码风格,简洁优雅是核心。关联查询用了渴求式加载,就能有效减少的条数,保证数据库的性能。 前几天写了一遍关于laravel分表关联的查询,但是我个人觉得还不算完美,于是今天重新看了一下laravel模型的底层代码,终于写出我暂时觉得最满意的代码-laravel风格,...

    fuchenxuan 评论0 收藏0
  • 深入理解 Laravel Eloquent(三)——模型关系(关联)

    摘要:是什么是一个,全称为,翻译为对象关系映射如果只把它当成数组库抽象层那就太小看它了。所谓对象,就是本文所说的模型对象关系映射,即为模型间关系。至此,深入理解系列文章到此结束。 原文发表在我的个人网站:深入理解 Laravel Eloquent(三)——模型间关系(关联) 在本篇文章中,我将跟大家一起学习 Eloquent 中最复杂也是最难理解的部分——模型间关系。官方英文文档中...

    2501207950 评论0 收藏0
  • Laravel 中的一个后期静态绑定

    摘要:实验一个抽象类,有个方法,通过延迟静态绑定实例化并返回。这里如果把注释打开,打印的就是重写的值如果把抽象类改成普通类,改成的方式实例化,结果就不同了,打印的属性都是各自类的属性。 (原文地址,内容以原文为准,可能修改或者补充:https://blog.tanteng.me/2017/...) 关于 PHP 的 new static 延迟静态绑定,或者叫后期静态绑定,在 Laravel...

    30e8336b8229 评论0 收藏0
  • Laravel核心解读--Database(四) 模型关联

    摘要:为关联关系设置约束子模型的等于父模型的上面设置的字段的值子类实现这个抽象方法通过上面代码看到创建实例时主要是做了一些配置相关的操作,设置了子模型父模型两个模型的关联字段和关联的约束。不过当查询父模型时,可以预加载关联数据。 Database 模型关联 上篇文章我们主要讲了Eloquent Model关于基础的CRUD方法的实现,Eloquent Model中除了基础的CRUD外还有一个...

    gekylin 评论0 收藏0
  • Laravel 的 ORM 返回的数据类型小结

    摘要:一简介的数据库查询构造器提供了一个方便流畅的接口,用来创建及运行数据库查询语句。的查询构造器使用参数绑定,来保护你的应用程序免受注入的攻击。和返回的是影响行数,即失败为,成功为删除行数。 相信很多人在学习 Laravel 时,会对 ORM 返回的数据类型产生混淆,如返回集合,模或者整数类型,下面将对增删改查操作进行一个小结。 一、简介 Laravel 的数据库查询构造器提供了一个方便、...

    LeviDing 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<