muratgorken / laravel-with-where-has-aggregate
确保'withWhereHas'方法和'withAggregate'方法之间兼容性的包
dev-main
2024-02-28 14:19 UTC
Requires
- php: >=7.1.0
- laravel/framework: >5.0
This package is auto-updated.
Last update: 2024-09-28 15:39:27 UTC
README
安装
您可以通过composer安装此包
composer require muratgorken/laravel-with-where-has-aggregate
用法
例如,从一个作者模型中,我们想根据戏剧类别的书籍和这些书籍的平均页数来排名作者。我们想以bootstrapped的方式完成这项工作。所以;
$authorsWithDramaBooks = Author::withWhereHasAggregate('books', function ($query) { $query->where('type', 'drama'); }, 'avg(page_count as page_avg)')->get();
以形式 $query->where.
此包还支持多种操作。
$authorsWithRomanticBooks = Author::withWhereHasAggregate('books', function ($query) { $query->where('type', 'romantic'); }, 'avg(page_count as page_avg', 'max(page_count) as page_max', 'min(page_count) as page_min')->get()->toArray();
上述查询的输出;
array:1 [▼ 0 => array:6 [▼ "id" => 1 "name" => "William Shakespeare" "page_avg" => "400.0000" "page_max" => 500 "page_min" => 300 "books" => array:2 [▼ 0 => array:5 [▼ "id" => 1 "name" => "Romeo and Juliet" "author_id" => 1 "type" => "romantic" "page_count" => 500 ] 1 => array:5 [▼ "id" => 2 "name" => "Measure for Measure" "author_id" => 1 "type" => "romantic" "page_count" => 300 ] ] ] ]
这样您可以使用withWhereHas运行多个聚合函数。
当与Laravel自带的withWhereHas和withAggregate方法一起使用时,即使它们是相同的关系,也不会运行withAggregate方法中的相关条件。这意味着如果您;类似上面的示例
$books = Author::whereHas('books', function ($query) { $query->where('type', 'drama'); })->withAvg('books as page_count_avg', 'page_count')->get();
它将计算所有书籍的平均页数,而不仅仅是戏剧类型的书籍。
如有任何疑问,请随时提问。
$books = Author::whereHas('books', function ($query) { $query->where('type', 'drama'); })->withAggregate('books as page_count_avg', 'page_count', 'avg', function($query) { $query->where('type', 'drama'); })->get();
更新日志
请参阅CHANGELOG以获取有关最近更改的更多信息。
贡献
请参阅CONTRIBUTING以获取详细信息。
安全漏洞
请审查我们的安全策略以了解如何报告安全漏洞。
致谢
许可证
MIT许可证(MIT)。请参阅许可证文件以获取更多信息。