конструктор запросов laravel, где получают дубликаты данных - PullRequest
0 голосов
/ 07 ноября 2018

В настоящее время я пытаюсь получить идентификаторы кандидатов из списка имен кандидатов, которые у меня есть, для этого я в данный момент использую следующий запрос:

foreach ($candidateName as $index => $row) {
    $candidateIDS = DB::table('candidates')
                   ->select('id', 'account_name')
                   ->whereIn('account_name', $candidateName)
                   ->get();
}

Приведенный выше запрос ищет имена кандидатов, которые я посылаю через массив candidateName, и выводит данные, как и ожидалось.

У меня вопрос, как получить дубликаты данных через запрос. так как массив candidateName имеет повторяющиеся записи имен, и мне нужно, чтобы в выводе запроса были указаны повторяющиеся идентификатор и имя кандидата, как в массиве candidateName.

Образец 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"},];

1 Ответ

0 голосов
/ 12 ноября 2018

Реализация Laravel Возвращает все для условия IN (1,2,3,3,3,1) с дубликатами в условии IN :

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();
...