Эффективный способ Laravel для удаления записей X, если есть дубликаты

Я пытаюсь написать запрос, чтобы найти повторяющиеся записи на основе столбца с именем hash и удалить все, кроме 5 новейших записей, я подумал, что могу использовать метод limit, чтобы ограничить количество записей, но не уверен, что лучший способ сделать это без выполнения нескольких запросов.

Например, если у меня есть 30 записей в моей таблице базы данных applications, где столбец hash равен азбука, я хочу удалить 25 записей, оставив только 5 записей.

Если для определенного hash есть 6 записей, то я бы хотел удалить только 1 запись, но я не уверен, как бы я этого добился, если записей меньше 5.

Мой текущий запрос для захвата этих записей, где я бы зациклился и удалил:

/**
 * Get applications by hash
 */
protected function getDuplicateApplications($hash = '')
{
    return Application::where('hash', $hash)
                      ->orderBy('created_at', 'asc')
                      ->limit(5)
                      ->get();
}

Что еще мне нужно?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
protected function deleteDuplicateApplications($hash = '', $skip = 5)
{
    // First get total count
    $totalCount = Application::where('hash', $hash)->count();

    // Then skip certain amount and take rest and delete it.
    return Application::where('hash', $hash)
                        ->orderBy('created_at', 'desc')
                        ->skip($skip)
                        ->take($totalCount - $skip)
                        ->delete();
}

Нужна ли мне конкретная версия Laravel для skip? Я использую 8.83, и при пропуске я получаю синтаксическую ошибку или нарушение прав доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL

Ryan H 06.05.2022 11:18

@RyanH Я обновил ответ. skip следует использовать вместе с методом take()

BadPiggie 06.05.2022 11:22

Другие вопросы по теме