PHPackages                             leslack-hub/laravel-tools - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. leslack-hub/laravel-tools

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

leslack-hub/laravel-tools
=========================

laravel 工具包

v0.2(3y ago)24PHP

Since Jun 12Pushed 3y agoCompare

[ Source](https://github.com/Leslack-hub/laravel-tools)[ Packagist](https://packagist.org/packages/leslack-hub/laravel-tools)[ RSS](/packages/leslack-hub-laravel-tools/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (1)Dependencies (1)Versions (3)Used By (0)

laravel-tools
=============

[](#laravel-tools)

laravel 7.x 工具类

一、ShardingModel 单字段分表
---------------------

[](#一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 多字段分表
--------------------------

[](#二multishardingmodel-多字段分表)

### 准备：

[](#准备-1)

需要在单字段分表的基础上实现 按照id分表 为分表的主表 如：按照id 4000w 以下 分了2表 为sharding\_order\_id\_0 sharding\_order\_id\_1 冗余表： 按照user\_id 500w用户一张冗余表 实现shardingByUserId 方法，返回指定表名 配置SHARDING\_COLUMNS 'user\_id' =&gt; \[ // 分表字段 'condition' =&gt; \['id'\], // 查询规则 'fill' =&gt; \['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 获取多组的值
-----------------------------

[](#三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;
}
```

### 用法：

[](#用法-1)

```
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);
```

###  Health Score

19

—

LowBetter than 10% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity6

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity39

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

1429d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/b886e3ae30f880dbc6475930e77ee46662045a5ebcad4e49db634ff2852ee50f?d=identicon)[Leslack-hub](/maintainers/Leslack-hub)

---

Top Contributors

[![Leslack-hub](https://avatars.githubusercontent.com/u/42340479?v=4)](https://github.com/Leslack-hub "Leslack-hub (1 commits)")

### Embed Badge

![Health badge](/badges/leslack-hub-laravel-tools/health.svg)

```
[![Health](https://phpackages.com/badges/leslack-hub-laravel-tools/health.svg)](https://phpackages.com/packages/leslack-hub-laravel-tools)
```

###  Alternatives

[wireui/wireui

TallStack components

1.8k1.3M16](/packages/wireui-wireui)[livewire/volt

An elegantly crafted functional API for Laravel Livewire.

4195.3M84](/packages/livewire-volt)[ramonrietdijk/livewire-tables

Dynamic tables for models with Laravel Livewire

21147.4k](/packages/ramonrietdijk-livewire-tables)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
