leslack-hub/laravel-tools
Composer 安装命令:
composer require leslack-hub/laravel-tools
包简介
laravel 工具包
README 文档
README
laravel 7.x 工具类
一、ShardingModel 单字段分表
准备:
继承ShardingModel类 设置SHARDING_COLUMN 分表字段 实现SharingTable 方法。按照规则返回指定表名称
class Order extends ShardingModel { /** * 分表字段 */ const SHARDING_COLUMN = 'user_id'; /** * 获取表名称 * * @param $userId * * @return string */ public static function shardingTable($userId) { return 'order_' . (int)($userId / 1000000); } }
使用:
单字段分表无需修改代码 where中必须含有分表字段,会在where条件中指定的值修改指定的表
注: where在查询字段 必须与SHARDING_COLUMN一致 Order::create([ 'user_id' => $userId, 'order_id' => 'xxxxxx', ]); 连表查询时 需先获取表名 $tableName = Order::shardingTable($userId); $builder = OrderDetail::query() ->leftjoin($tableName, function ($join) use ($userId, $tableName) { $join->on('order_detail.id', '=', $tableName . '.order_id') ->where($tableName . '.user_id', '=', $userId) ->where($tableName . '.deleted_at', null); })
二、MultiShardingModel 多字段分表
准备:
需要在单字段分表的基础上实现 按照id分表 为分表的主表 如:按照id 4000w 以下 分了2表 为sharding_order_id_0 sharding_order_id_1 冗余表: 按照user_id 500w用户一张冗余表 实现shardingByUserId 方法,返回指定表名 配置SHARDING_COLUMNS 'user_id' => [ // 分表字段 'condition' => ['id'], // 查询规则 'fill' => ['order_id'], // 需要同步的属性 ], 按照merchant_id 分表同理
class Order extends MultiShardingModel { const SHARDING_COLUMN = 'id'; public static function shardingTable($id) { if ($id > 0) { $num = (int)($id / 20000000); if ($num < 2) { return 'sharding_order_id_' . $num; } } return 'order'; } const SHARDING_COLUMNS = [ 'user_id' => [ 'condition' => ['id'], 'fill' => ['id','order_id','created_at'], ], 'merchant_id' => [ 'condition' => ['id'], 'fill' => ['id','user_id','created_at'], ], ]; public static function shardingByUserId($uid) { return 'sharding_order_user_id_' . (int)($uid / 5000000); } public static function shardingByMerchantId($merchantId) { return 'sharding_order_merchant_id_' . (int)($merchantId / 5000000); } }
用法:
查询主表时 同ShardingModel 一样 也可以使用 shardingWhere 方法指定查询表
Order::withTrashed()->shardingWhere('id', 1112)->first()
查询冗余表 如:用户 123 的所有订单
$orders = order::query()->zoneWhere('user_id', 123)->get(); 更新user_id 所有用户订单时间 会同步更新其他主表 或冗余表 deleteAll 方法能够删除 order::query()->zoneWhere('user_id', 123)->updateAll(['created_at' => '2022-01-01 00:00:00']);
连表查询参考ShardingModel
三、ArrayService 按照指定key 获取多组的值
使用场景
switch($type) { case 1: $name = 'name_1'; break; case 2: $name = 'name_2'; break; case 3: $name = 'name_3'; break; case 4: $name = 'name_4'; break; } // 执行一些业务逻辑 doSomeThing(); switch($type) { case 1: $callback = function(){}; break; case 2: $callback = function(){}; break; case 3: $callback = function(){}; break; case 4: $callback = function(){}; break; }
用法:
use LeslackHub\LaravelTools\ArrayService; $type =1; $arrayService = new ArrayService([1,2,3,4],['name_1','name_2','name_3','name4'],[function(){},function(){},function(){},function(){}]) $name = $arrayService->getValue('0.'.$type); $callback = $arrayService->getValue('1.'.$type); // 增加类型 1 2 3 4 对应的标题 $arrayService->push(['tilte_1','tilte2','title_3','title_4'],'title'); $arrayService->getValue('title.'.$type);
leslack-hub/laravel-tools 适用场景与选型建议
leslack-hub/laravel-tools 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 4 次下载、GitHub Stars 达 2, 最近一次更新时间为 2022 年 06 月 12 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 leslack-hub/laravel-tools 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 leslack-hub/laravel-tools 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 4
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 2
- 点击次数: 2
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: Unknown
- 更新时间: 2022-06-12