我目前正在尝试获取我所拥有的候选人姓名列表的候选人ID,为此,我目前正在使用以下查询,
foreach ($candidateName as $index => $row) {
$candidateIDS = DB::table('candidates')
->select('id', 'account_name')
->whereIn('account_name', $candidateName)
->get();
}
以上查询查找我通过candidateName
数组发送的候选名称,并按预期输出数据。
我的问题是如何通过查询获取重复数据。因为candidateName
数组具有重复的名称记录,并且我需要查询输出具有与candidateName
数组相同的候选ID和名称。
示例candidateName
数组
$candidateName = [name1,name2,name3,name3,name4,name5]
预期产量
$candidateIDS = [{id:1,account_name:"name1"},
{id:2,account_name:"name2"},
{id:3,account_name:"name3"},
{id:3,account_name:"name3"},
{id:4,account_name:"name4"},
{id:5,account_name:"name5"},];
答案 0 :(得分:0)
Return all for where IN (1,2,3,3,3,1) clause with duplicates in the IN condition的Laravel实现:
DB::table('candidates')
->select('candidates.id', 'candidates.account_name')
->joinSub(function($query) use($candidateNames) {
foreach($candidateNames as $i => $candidateName) {
if($i == 0) {
$query->selectRaw('? as account_name', [$candidateName]);
} else {
$query->unionAll(DB::query()->selectRaw('? as account_name', [$candidateName]));
}
}
}, 'where_in', 'where_in.account_name', 'candidates.account_name')
->get();