Laravel: удалить все, кроме последних 5 - PullRequest
0 голосов
/ 01 февраля 2020

Я пытаюсь заставить этот запрос работать:

$deleteSubmissions = ViewedSubmission::where('user_id', Auth::user()->id)
    ->latest()
    ->skip(5)
    ->delete();

Я хочу удалить все записи ViewedSubmissions для аутентифицированного пользователя, КРОМЕ для последней 5. Как я могу сделать эту работу? В настоящее время это ничего не удаляет, несмотря на наличие более 5 записей.

Ответы [ 2 ]

1 голос
/ 01 февраля 2020

Я бы справился с этим следующим образом:

$keep = ViewedSubmission::where('user_id', Auth::user()->id)
    ->latest()
    ->take(5)
    ->pluck('id');

ViewedSubmission::where('user_id', Auth::user()->id)
    ->whereNotIn('id', $keep)
    ->delete();
0 голосов
/ 01 февраля 2020

Редактировать: Вы можете выбрать последние 5 записей, за исключением того, что данный массив затем удален.

$except = 5;
ViewedSubmission::where('user_id', Auth::user()->id)
    ->latest()
    ->skip($except)
    ->get()
    ->each(function($row){ $row->delete(); });

И если у вас есть связь с идентификатором пользователя (от одного до многих), названным, например, viewedSubmissions, вы можете сделай так:

$except = 5;
Auth::user()->viewedSubmissions()
    ->latest()
    ->skip($except)
    ->get()
    ->each(function($row){ $row->delete(); });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...