luffluo / laravel-orm-support
扩展 Laravel ORM
v1.1.10
2020-08-31 03:26 UTC
Requires
- php: >=7.1.3
- laravel/framework: 5.* || 6.* || 7.*
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