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

前端之家收集整理的这篇文章主要介绍了Laravel模型间关系设置分表的方法示例前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Eloquent是什么

Eloquent 是一个 ORM,全称为 Object Relational Mapping,翻译为 “对象关系映射”(如果只把它当成 Database Abstraction Layer 数组库抽象层那就太小看它了)。所谓 “对象”,就是本文所说的 “模型(Model)”;对象关系映射,即为模型间关系。中文文档: http://laravel-china.org/docs/eloquent#relationships

引用

在实际开发中经常用到分库分表,比如用户表分成 100 张,那么这个时候查询数据需要设置分表,比如 Laravel 的 Model 类中提供了 setTable 方法

table = $table;

return $this;
}

那么对数据表的增删改查需要先 new 一个模型实例,再设置表名。如:

setTable("t_group_" . hashID($userid,20)) ->newQuery() ->where('group_id',$request->group_id) ->update($attributes);

这个很简单,那么在模型间关系比如 HasOne,HasMany 等使用这种方式的情况下,如何设置分表呢?

找了半天没找到好的办法,以 HasOne 为例,看了 Model 类 HasOne 函数实现方法,没有地方可以设置表名,只好复制一份 HasOne 方法进行修改。比如改成 myHasOne,加上 $table 参数可以设置表名,并且在对象实例化后调用 setTable,果然就可以了。

代码如下:

myHasOne(Circle::class,'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://www.f2er.com/laravel/16124.html

猜你在找的Laravel相关文章