luffluo/laravel-orm-support

扩展 Laravel ORM

v1.1.10 2020-08-31 03:26 UTC

This package is auto-updated.

Last update: 2024-09-15 11:56:53 UTC


README

扩展 Laravel ORM

添加了按月分表的支持

安装

$ composer require luffluo/laravel-orm-support:~1.0 -vvv

使用

注意

Illuminate\Database\Query\Builder 类复制到根目录下 replaces\Database\Query\Builder.php,然后用下面的 getBindings 方法覆盖原来的

<?php

declare(strict_types = 1);

namespace Illuminate\Database\Query;

class Builder
{
    /**
    * Get the current query value bindings in a flattened array.
    *
    * @return array
    */
    public function getBindings()
    {
        $bindings = Arr::flatten($this->bindings);
        
        if ($this->unions && count($this->bindings['union']) <= 0) {
            foreach ($this->unions as $union) {
                $bindings = array_merge($bindings, $union['query']->getBindings());
            }
        }
        
        return $bindings;
    }
}

composer.json 中添加如下配置,然后执行 composer dump

{
    "autoload": {
        "files": [
            "replaces/Database/Query/Builder.php",
        ]
    }
}

表名应使用如下格式 xxxx_202111, xxxx_202112 等

按月分表的使用

use \Luffluo\LaravelOrmSupport\Traits\MonthlyScale;

class Model
{
    use MonthlyScale;
}

将上面的 Trait 添加到 model 后,就像原来使用 model 一样,会查询当月的数据

查询当前月

Model::query()->count();

查询上周的数据

// 上周
Model::queryForLastWeek()->count();

// 上上周
Model::queryForLastWeeks(2)->count();

查询某个时间段的数据,时间支持 Carbon

Model::queryForPeriod('2019-01', '2019-11')->count();

查询某年某月的数据,时间支持 Carbon

Model::queryForYearMonth('201901')->count();

select

Model::queryForPeriod('2019-11-26', '2020-11-26')
    ->unionSelect('xxx', 'xxx')
    ->unionSelectRaw('xxx', 'xxx')
    ->count();

where

Model::queryForPeriod('2019-11-26', '2020-11-26')
    ->unionWhere('xxx', 'xxx')
    ->unionOrWhere('xxx', 'xxx')
    ->unionWhereIn('xxx', ['xx', 'xx'])
    ->unionWhereBetween('xx', ['xxx', 'xxx'])
    ->count();

groupBy

Model::queryForPeriod('2019-11-26', '2020-11-26')
    ->unionGroupBy('xxx', 'xxx')
    ->count();

许可证

MIT