Laravel框架中数据库分表时Model使用方法_snail_lmz的博客-CSDN博客_laravel数据库分表


本站和网页 https://blog.csdn.net/wenai1292/article/details/122438085 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

Laravel框架中数据库分表时Model使用方法_snail_lmz的博客-CSDN博客_laravel数据库分表
Laravel框架中数据库分表时Model使用方法
snail_lmz
于 2022-01-11 18:03:03 发布
774
收藏
分类专栏:
PHP
后端
文章标签:
laravel
数据库
php
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wenai1292/article/details/122438085
版权
PHP
同时被 2 个专栏收录
5 篇文章
0 订阅
订阅专栏
后端
8 篇文章
0 订阅
订阅专栏
前言: 0、最近在使用laravel框架做MySQL分表的时候经过实践和踩坑,总结了以下3种可行的分表方法,亲测可用。 1、本人公司做的是SaaS系统,以店铺为维度。店铺id(shop_id) 命名规则为: shop+6位随机数字字母+4位数字 。 示例:shopHqlTPT3482 、shopk9nj5m3714。 2、最近在做一个CRM系统,用户表 t_user表,由于数据量较大,于是决定对店铺id(shop_id) 取模 拆分成20个表 ,表名分别是t_user_0,t_user_1,t_user_2,…t_user_17,t_user_18,t_user_19。 3、本分表方法使用的laravel版本 是 laravel 6.x,其它版本可能有些许差异,使用的时候注意区分哦。 4、t_user_ 表 的model文件 命名为 TUser.php。 下面开始讲述分表方法,以及对应的调用分表后model的方法:
方法1: 在t_user表 的 model中 对 $this->table 重新赋值。 TUser.php 文件内容如下:
namespace App\Models;
class TUser extends Model
protected $table = '';
public function __construct()
parent::__construct();
$this->table = self::getTableByShopId(); //重写表名
public static function getTableByShopId()
$shop_id = Utils::getShopId(); //取当前店铺id
$prefix = 't_user_';
$num = fmod(sprintf("%u", crc32($shop_id)), 20); //取模分表,分20张;使用%u解决32位下出现负数的问题
return $prefix . $num;
调用该model的方法如下:
TUser::query()->where('shop_id','shopHqlTPT3482')->first(); //此时查询的就是 t_user_14 这张表
方法2:在t_user表 的 model中重写 getTable 方法。 TUser.php 文件内容如下:
namespace App\Models;
class TUser extends Model
//重写laravel 框架底层的 getTable() 方法
public function getTable() {
$shop_id = Utils::getShopId(); //取当前店铺id
$prefix = 't_user_';
$num = fmod(sprintf("%u", crc32($shop_id)), 20);//取模分表,分20张;使用%u解决32位下出现负数的问题
return $prefix . $num;
调用该model的方法如下:
TUser::query()->where('shop_id','shopHqlTPT3482')->first(); //此时查询的就是 t_user_14 这张表
方法3:在t_user表 的 model中使用 setTable 方法 将 shop_id 取模后拼接的表名,写入到model底层。 TUser.php 文件内容如下:
namespace App\Models;
class TUser extends Model
//获取分表后的model
public function getSplitModel($shop_id)
return (new self())->setTable($this->getTclueTableName($shop_id))->newQuery();
//获取 t_user 表的表名
public function getTuserTableName(string $shop_id)
return 't_user_' . fmod(sprintf("%u", crc32($shop_id)), 20);//取模分表,分20张;使用%u解决32位下出现负数的问题
调用该model的方法如下:
$shop_id = 'shopHqlTPT3482';
(new TUser())->getSplitModel($shop_id)->where('shop_id','shopHqlTPT3482')->first(); //此时查询的就是 t_user_14 这张表
总结: 以上,就是3种使用laravel框架分表的方法了。推荐使用方法2和方法3,本人项目生产环境目前使用的是这两种方法。
snail_lmz
关注
关注
点赞
收藏
打赏
评论
Laravel框架中数据库分表时Model使用方法
前言:0、最近在使用laravel框架做MySQL分表的时候经过实践和踩坑,总结了以下3中可行的分表方法,亲测可用。1、本人公司做的是SaaS系统,以店铺为维度。店铺id(shop_id) 命名规则为: shop+6位随机数字字母+4位数字 。 示例:shopHqlTPT3482 、shopk9nj5m3714。2、最近在做一个CRM系统,用户表 t_user表,由于数据量较大,于是决定对店铺id(shop_id) 取模 拆分成20个表 ,表名分别是t_user_0,t_user_1,t_user_2
复制链接
扫一扫
专栏目录
Laravel Eloquent 分表方法并使用模型关联
飞鱼计划
02-09
741
1、假设我们有一万本书籍,每本书籍有两千章节,我们创建数据库时的表结构是书籍信息表:books;以及章节信息表:chapters,前面说到书籍越多章节数也就越多解决方案是将章节表分成十个形式为 chapters_0、chapters_1、......chapters_9 表后缀规则是书籍 ID 与 10 取余,这样所有的书籍章节会分散在这 10 个 chapters 中。
2、表建好后开始创建 model 模型,按照惯例所有的模型都将写在 App\Models 下;首先我们先创建一个类名为 Model 的模
laravel-table:laravel分表扩展
05-02
laravel表
Laravel表分片
安装
composer xialin/table
注入
'providers' => [
/*
* Laravel Framework Service Providers...
*/
Illuminate \ Auth \ AuthServiceProvider ::class,
Illuminate \ Broadcasting \ BroadcastServiceProvider ::class,
Illuminate \ Bus \ BusServiceProvider ::class,
Illuminate \ Cache \ CacheServiceProvider ::class,
Illuminate \ Foundation \ Providers \ Console
评论 2
您还未登录,请先
登录
后发表或查看评论
Laravel model 模型用法和部分问题解方法
最新发布
青及笄经验分享
10-25
605
Laravel model 模型用法和部分问题解方法,Laravel 初体验
laravel的mysql的分表及分表联查解决方案
qq_33974231的博客
10-28
648
0X00 问题初现
php的laravel如何实现水平分表?最近手里有个项目,框架使用php的laravel7框架,由于数据量激增,当时为了快速迭代开发的详情表现在一晚上就干出30万行的数据量,主表已经一千两百万的数据。因为这只是用来存储记录用户视频详情,所以决定使用按月进行水平分表。
初期直接使用union all进行联表,导致sql没有走索引,早上六点客户疯狂发消息说生产挂了,赶紧排查发现所有sql都在全表扫描,把SQL服务器打死了,语句如下
select * from (select * from v
laravel-model-status:轻松向模型添加状态
02-03
为雄辩模型分配状态
假设您想让Eloquent模型保持状态。 只需将status字段添加到该模型并完成此操作即可轻松解决。 但是,如果您需要状态更改的历史记录或需要存储一些有关状态更改原因的额外信息,只需添加一个字段就不会删除它。
此程序包提供了一个HasStatuses特性,一旦将其安装在模型上,便可以执行以下操作:
// set a status
$ model -> setStatus ( 'pending' , 'needs verification' );
// set another status
$ model -> setStatus ( 'accepted' );
// specify a reason
$ model -> setStatus ( 'rejected' , 'My rejection reason' );
// get the current status
$ model -> status (); // returns an instance of \Spatie\ModelStatus\Status
// get the previous
9.laravel 简单尝试分表
hshshshshs1的专栏
12-06
554
laravel 简单分表
Laravel学习笔记 - 读取数据库的基本操作
aladinggao的博客
10-19
416
1. 在 app\Http\Controllers\CustomizedController.php 里 引入相应的 Model, 如: use App\CustomizedModel;
2. 同一php 文件里:
class CustomizedController extends Controller
public function index()
$customizedtable = CustomizedModel::all(); //获取 customiz.
laravel模型获取表名_通过 Laravel Eloquent 模型实现简单增删改查操作
weixin_35985796的博客
01-19
2747
概述Eloquent 是一个 ActiveRecord ORM 框架,ORM 全称是 Object Relational Mapping,意为对象关系映射,用于实现面向对象编程语言里不同类型系统的数据之间的转换,简单来说,它会构建类与数据表之间的映射关系,从而建立起一个可在编程语言里使用的「虚拟对象数据库」。「ActiveRecord」是 ORM 的一种实现模式,Eloquent 则是 ...
Laravel 数据库Model学习
m0_58027884的博客
04-19
362
注意:对数据的操作时,需要查看自己嗯.env文件里的默认数据库是否跟改为需要操作的目标数据库
一、创建model模型文件:
php artisan make:model Home/Member
创建后的文件会放在app目录下的Models目录下
二、model文件关联数据库表:
如果需要关联的数据表的名称,不是model文件的复数,比如:model文件:member 表名:(members)、model文件:user 表名:(users);
上面这种情况的话,在model文件内设置关联的表名:
protec
laravel mysql 分表_laravel分库分表
weixin_33743292的博客
02-26
1750
分表是数据量很大,单一数据表存储有限,查询起来很慢,基于这样的场景下才进行分表的。分表的方式有很多,网上总是说些理论知识,什么垂直分表,水平分表,这没错,但全是空口白话,没有实际的场景实例做支撑,很难让人阅读下去。本篇文章从实际出发,讨论下分表的情况。首先要知道动态设置模型数据表// 分表的前缀或者后缀,此处是后缀,$prefix = 1;$order = new Order();$order-&...
Laravel 模型间关系设置分表方法
weixin_34202952的博客
04-19
363
在实际开发中经常用到分库分表,比如用户表分成 100 张,那么这个时候查询数据需要设置分表,比如 Laravel 的 Model 类中提供了 setTable 方法:
/**
* Set the table associated with the model.
* @param string $table
* @retur...
laravel分表查询
渡目成书
01-07
2191
honey_log表,这个是重点,因为它是分表的,现在我们要封装一个union表的方法,让这个model自动把涉及的分表作为一张表赋予model查询
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use DB;
class HoneyLog extends Model
/*传入查询的开始...
yii2 模型中set_Laravel模型间关系设置分表方法详解
weixin_39599454的博客
12-12
37
在实际开发中经常用到分库分表,比如用户表分成 100 张,那么这个时候查询数据需要设置分表,比如 Laravel 的 Model 类中提供了 setTable 方法:/**
* Set the table associated with the model.
* @param string $table
* @return $this
*/
public functi...
laravel 5.8 分表及分页查询处理
丁丁丁梦涛的博客
05-17
672
#laravel 5.8 分表及分页查询处理
## trait类
<?php
namespace App\Libraries\Split;
use App\Exceptions\ResponseApiException;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
trait SplitTableTrait
//是否分表,默认fal.
laravel 分表
Besny1009的博客
05-12
610
业务逻辑说明
单库单表数据量达到1000w,每天的增长量再20w 左右 现阶段 客户量少,后期客户量增加,订单数量增加较快,已经添加了索引优化,优化逻辑达到瓶颈,先考虑使用分表的逻辑分表逻辑如下
class SendLog extends Model
protected $table;
public function __construct(int $work_id)
//现阶段分成10张表
$this->table = 'send
Laravel学习-添加分类和获取列表-with
TO_Web的博客
09-28
261
一. 添加分类, 在模型中 建立模型之间的关联
// 在模型文件中添加, 建立模型之间的关联
public function children()
// Category 关联的表名; pid 外键, id 内键
return $this->hasMany(Category::class, 'pid', 'id');
二. 在控制器中使用
// 获取分类列表
// children.children 会自己根据建立的模型去 自己嵌套找子级
$categories
laravel的orm查询一个表同时查询在另一个表的数量count
征途人生&梦
12-17
1022
首先需要建立关联关系
public function records()
return $this->hasMany('App\Model\Admin\RecordExpert');
public function expert()
return $this->belongsTo('App\Model\Admin\ExpertInfo');
查询
ExpertInfo::select(['i..
laravel mysql 分表_Laravel模型间关系设置分表的方法示例
weixin_39835991的博客
02-17
100
Eloquent是什么Eloquent 是一个 ORM,全称为 Object Relational Mapping,翻译为 “对象关系映射”(如果只把它当成 Database Abstraction Layer 数组库抽象层那就太小看它了)。所谓 “对象”,就是本文所说的 “模型(Model)”;对象关系映射,即为模型间关系。中文文档: http://laravel-china.org/docs/...
php laravel 分表,PHP框架Laravel中使用UUID实现数据分表操作
weixin_32968007的博客
03-11
165
这篇文章主要介绍了PHP框架Laravel中使用UUID实现数据分表操作,结合实例形式较为详细的分析了Laravel框架基于UUID进行数据分表的相关操作步骤、实现技巧与操作注意事项,需要的朋友可以参考下本文实例讲述了PHP框架Laravel中使用UUID实现数据分表操作。分享给大家供大家参考,具体如下:UUIDUUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。说的简单...
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:大白
设计师:CSDN官方博客
返回首页
snail_lmz
CSDN认证博客专家
CSDN认证企业博客
码龄7年
暂无认证
原创
30万+
周排名
8万+
总排名
5253
访问
等级
121
积分
粉丝
获赞
评论
12
收藏
私信
关注
热门文章
api登录
2207
统计排名的MySQL语句
960
服务器灰度部署和原理
821
Laravel框架中数据库分表时Model使用方法
774
MySql类型转换函数cast
190
分类专栏
nginx
1篇
go
1篇
算法和数据结构
2篇
PHP
5篇
MySQL
3篇
后端
8篇
最新评论
Laravel框架中数据库分表时Model使用方法
snail_lmz:
那是当然,我们之前的分表策略是分20张,是根据我们的业务估算过的。我司当时有5亿多用户,预测我们这个业务最大能涨到1亿用户量,然后就分了20张表,平均每张表容纳500万数据左右。后面如果真到了瓶颈,肯定就要优化重构了。
Laravel框架中数据库分表时Model使用方法
有树君:
挺好的分表策略,但如果数据量大,后期扩容可能有问题。
go新手常踩的坑
programmer_ada:
云原生入门 技能树或许可以帮到你:https://edu.csdn.net/skill/cloud_native?utm_source=AI_act_cloud_native
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
MySql类型转换函数cast
服务器灰度部署和原理
go新手常踩的坑
2022年4篇
2021年2篇
2020年1篇
2018年2篇
目录
目录
分类专栏
nginx
1篇
go
1篇
算法和数据结构
2篇
PHP
5篇
MySQL
3篇
后端
8篇
目录
评论 2
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
snail_lmz
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值