Laravel Eloquent分表方法并使用模型关联的实现
众所周知Laravel是PHP开发项目最优美的框架之一,尤其是Eloquent对数据库的操作提供了特别多的便利。
在实际开发中我们经常涉及到分库分表场景,那么怎样才能继续配合Eloquent优雅的使用Model模型呢,接下来给大家分享下我在实际开发中所遇到的问题。(备注:此方法来源StackOverFlow原文地址找不到了,配合我们实际项目更能清晰表述)
1、假设我们有一万本书籍,每本书籍有两千章节,我们创建数据库时的表结构是书籍信息表:books;以及章节信息表:chapters,前面说到书籍越多章节数也就越多解决方案是将章节表分成十个形式为chapters_0、chapters_1、......chapters_9表后缀规则是书籍ID与10取余,这样所有的书籍章节会分散在这10个chapters中。
2、表建好后开始创建model模型,按照惯例所有的模型都将写在App\Models下;首先我们先创建一个类名为Model的模型并继承Illuminate\Database\Eloquent\Model
suffix=$suffix; if($suffix!==null){ $this->table=$this->getTable().'_'.$suffix; } } //提供一个静态方法设置表后缀 publicstaticfunctionsuffix($suffix) { $instance=newstatic; $instance->setSuffix($suffix); return$instance->newQuery(); } //创建新的"chapters_{$suffix}"的模型实例并返回 publicfunctionnewInstance($attributes=[],$exists=false) { $model=parent::newInstance($attributes,$exists); $model->setSuffix($this->suffix); return$model; } }
2、其他模型全都继承以上的Model而不是继承Illuminate\Database\Eloquent\Model,获取某本书的章节controller
id); //章节列表(使用模型关联) $list=$book->chapters()->oldest('id')->get(); } }
3、chapter模型(普通查询)
where('book_id',$bookId)->get(); } }
3、好了,我们章节的分表模型已经完成了。那么如何使用模型关联呢?我们来看Book模型如何关联Chapter
setSuffix($this->id%10); $foreignKey=$instance->getTable.'.'.$this->getForeignKey(); $localKey=$this->getKeyName(); returnnewHasMany($instance->newQuery(),$this,$foreignKey,$localKey); } }
到此model发表查询及model关联就完成了,如果有其他更好的方式,请大家不吝赐教。第一次发表文章,如有不对的地方希望大家多多指教!!也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。