繁体   English   中英

Laravel 哪里和哪里?

[英]Laravel whereIn AND whereIn?

所以我试图根据两个字段显示重复的结果,它们必须匹配。 我有一个Expense model,我只想获取dateamount相同的结果,然后返回这些结果。 例如,我到目前为止所拥有的:

$results = Expense::where(function ($query) {
        $query->whereIn('amount', function ($q) {
            $q->select('amount')->from('expenses')->groupBy('amount')->havingRaw('count(*) > 1');
        })->whereIn('date', function ($q) {
            $q->select('date')->from('expenses')->groupBy('date')->havingRaw('count(*) > 1');
        });
    })
    ->get();

这确实向我显示了重复的结果,但也只有数量或日期匹配,但我需要数量和日期都匹配。 下面给了我相同的结果:

Expense::whereIn('date', array_column(DB::select('select date from expenses group by date having count(*) > 1'), 'date'))
    ->whereIn('amount', array_column(DB::select('select amount from expenses group by amount having count(*) > 1'), 'amount'))
    ->get());

因此,例如,在我的数据库中,我有以下expenses

Name: Expense 1
Amount: 500
Date: 2022-04-16

Name: Expense 2
Amount: 500
Date: 2022-04-16

Name: Expense 3
Amount: 500
Date: 2022-04-15

第三项费用不应退还,但会包含在结果中。 有什么指示可以让我朝着正确的方向前进吗?

尽管它没有使用whereIn ,但正如您在问题中所述,您也可以按两列对行进行分组。
因此,您可以告诉 Eloquent 到 select 您感兴趣的两列以及count聚合,然后按这两列分组并仅询问count大于1的列。

$results = Expense:select('amount','date', DB::raw('COUNT(*) as `count`'))
    ->groupBy('amount', 'date')
    ->havingRaw('COUNT(*) > 1')
    ->get();

以下示例:

费用 1

  • 数量: 500
  • 日期: 2022-04-16

费用 2

  • 数量: 500
  • 日期: 2022-04-16

费用 3

  • 数量: 500
  • 日期: 2022-04-15

预期结果将是:

  • 数量: 500
  • 日期: 2022-04-16
  • 数量: 2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM