时间:2021-05-26
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);}不知道大家有没有更优雅的方式。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
关系模型采用二维表的的形式表示实体和实体间联系的存储结构。关系模型中,字段称为属性,字段值称为属性值,记录类型称为关系模型。关系模式名是R,记录称为元组,元组的
本文实例讲述了Laravel5.1框架模型一对一关系实现与使用方法。分享给大家供大家参考,具体如下:这篇文章主要记录模型的一对一关系,关联关系是Model的一种
以数据库为例,关系模型的数据结构是单一的,实体以及实体间的各种联系均用关系来表示,从用户角度看,关系模型中数据的逻辑结构是一张二维表。 数据结构(datast
回想一些我们在没有学习ssh的时候,我们建立数据库的表时,首先是数据库建模E-R图,然后再通过实体模型来建立关系模型,再建立相应的表。实体间存在三种关系,一对一
注意数据模型中的关系。在设计数据模型时,添加表和列时,或者编写查询时,要从长远角度考虑实体间的关系如何影响性能和可扩展性的情形。在设计数据模型时,要考虑到将来的