abordage / eloquent-percentile
Laravel Eloquent 中带有 Median(), Percentile(), median() 和 percentile() 聚合函数
1.0.1
2024-03-23 19:00 UTC
Requires
- php: >=7.4
- illuminate/support: ^8.0 || ^9.0 || ^10.0 || ^11.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- nunomaduro/collision: ^5.0 || ^6.0 || ^7.0 || ^8.0
- nunomaduro/larastan: ^1.0 || ^2.0
- orchestra/testbench: ^6.0 || ^7.0 || ^8.0 || ^9.0
- phpunit/phpunit: ^9.6 || ^10.0
This package is auto-updated.
Last update: 2024-09-08 23:43:07 UTC
README
该包提供了几个聚合函数,其工作方式与 withAvg()
, withMax()
相同
要求
- PHP 7.4 - 8.3
- Laravel 8.x - 11.x
支持
- PostgreSQL
安装
您可以通过 composer 安装此包
composer require abordage/eloquent-percentile
用法
聚合相关模型
withMedian()
方法将在您的结果模型上放置一个 {relation}_median_{column}
属性
use App\Models\Post; $posts = Post::withMedian('comments', 'votes')->get(); foreach ($posts as $post) { echo $post->comments_median_votes; }
withPercentile()
方法将在您的结果模型上放置一个 {relation}_percentile{percentile*100}_{column}
属性
use App\Models\Post; $posts = Post::withPercentile('comments', 'votes', 0.85)->get(); foreach ($posts as $post) { echo $post->comments_percentile85_votes; }
检索聚合数据
在与 Eloquent 模型交互时,您还可以使用 percentile
和 median
聚合方法。正如您所期望的,这些方法返回一个标量值,而不是 Eloquent 模型实例
$median = Comment::where('active', 1)->median('votes'); $percentile95 = Comment::where('active', 1)->percentile('votes', 0.95);
模型自动 PHPDocs
如果您正在使用 ide-helper,您可以使用 模型钩子 描述属性。例如
<?php namespace App\Support\IdeHelper; use App\Models\Post; use Barryvdh\LaravelIdeHelper\Console\ModelsCommand; use Barryvdh\LaravelIdeHelper\Contracts\ModelHookInterface; use Illuminate\Database\Eloquent\Model; class PostHook implements ModelHookInterface { public function run(ModelsCommand $command, Model $model): void { if (!$model instanceof Post) { return; } $command->setProperty('comments_median_votes', 'float|null', true, false); $command->setProperty('comments_percentile80_votes', 'float|null', true, false); $command->setProperty('comments_percentile95_votes', 'float|null', true, false); } }
测试
在运行测试之前,将 phpunit.xml.dist
重命名为 phpunit.xml
并指定您的数据库连接设置
<php> <env name="DB_CONNECTION_POSTGRES" value="pgsql"/> <env name="DB_HOST_POSTGRES" value="postgres"/> <env name="DB_PORT_POSTGRES" value="5432"/> <env name="DB_DATABASE_POSTGRES" value="eloquent_percentile_test"/> <env name="DB_USERNAME_POSTGRES" value="default"/> <env name="DB_PASSWORD_POSTGRES" value="secret"/> </php>
然后运行
composer test:all
或
composer test:phpunit composer test:phpstan composer test:phpcsf
变更日志
请参阅CHANGELOG 以获取有关最近更改的更多信息。
贡献
请参阅CONTRIBUTING 以获取详细信息。
安全
请审查我们的安全策略 以了解如何报告安全漏洞。
反馈
发现错误或有功能请求? 打开一个问题,或者更好的是,提交一个拉取请求 - 欢迎贡献!
致谢
感谢
原始想法来自 tailslide-php,所以非常感谢其作者!
许可证
MIT 许可证 (MIT)。请参阅许可证文件 以获取更多信息。