[英]Laravel whereIn AND whereIn?
所以我试图根据两个字段显示重复的结果,它们必须匹配。 我有一个Expense
model,我只想获取date
和amount
相同的结果,然后返回这些结果。 例如,我到目前为止所拥有的:
$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.