muratgorken/laravel-with-where-has-aggregate

确保'withWhereHas'方法和'withAggregate'方法之间兼容性的包

资助包维护!
muratgorken

安装: 9

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 0

开放问题: 1

类型:服务提供者

dev-main 2024-02-28 14:19 UTC

This package is auto-updated.

Last update: 2024-09-28 15:39:27 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

安装

您可以通过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)。请参阅许可证文件以获取更多信息。