Получите последние данные о дубликате в Laravel Eloquent - PullRequest
1 голос
/ 17 марта 2020

, поэтому я пытаюсь получить дубликаты данных с большим номером идентификатора, чтобы я мог удалить самые последние дубликаты данных (а не старые).

Я пытался использовать orderBy, но он не работает

$duplicates = MasterPayrollInput::where('periode', $month)
        ->orderBy('id', 'asc')
        ->groupBy('nip')
        ->havingRaw('count(*) > 1')
        ->get();

    $duplicatesid = array_column($duplicates->toArray(), 'id');

    $todelete = array_map(function($item){ return $item[0]; }, $duplicatesid);

    MasterPayrollInput::whereIn('id', $duplicatesid )->delete();

Ответы [ 3 ]

1 голос
/ 17 марта 2020

Используйте whereIn замыкание, чтобы получить максимальный идентификатор в группе и удалить его одним запросом:

MasterPayrollInput::whereIn('id', function($query) {
    $query->from('master_payroll_inputs')
          ->groupBy('nip')
          ->havingRaw('count(*) > 1')
          ->selectRaw('MAX(id)');
})->delete();
0 голосов
/ 17 марта 2020

Используйте приведенный ниже запрос для удаления дубликатов

$duplicateIds = MasterPayrollInput::where('periode', $month)
    ->orderBy('id', 'asc')
    ->offset(1)
    ->limit(10)
    ->pluck('id');

MasterPayrollInput::whereIn('id', $duplicateIds)->delete();

смещение - пропустить первую строку, которую вы хотите сохранить.

limit - возможный номер. дубликатов.

0 голосов
/ 17 марта 2020

Вы можете использовать необработанный запрос для того же:

Предполагая, что вы хотите o удалить запись с дублирующимися именами в master_payroll_input таблице:

  1. Если вы хотите сохранить строка с самым низким значением id:

    $result = DB::delete('DELETE n1 FROM master_payroll_input n1, master_payroll_input n2 WHERE n1.id > n2.id AND n1.name = n2.name');

  2. Если вы хотите сохранить строку с самым высоким значением id:

    $result = DB::delete('DELETE n1 FROM master_payroll_input n1, master_payroll_input n2 WHERE n1.id < n2.id AND n1.name = n2.name');

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...