#php #mysql #laravel
#php #mysql #laravel
Вопрос:
Я делаю это в своем контроллере:
$latestRevision = DB::table('revisions')->latest('created_at')->first();
$firstRevision = DB::table('revisions')->find($id);
$revisions = DB::table('revisions')->whereBetween('created_at', [$firstRevision->created_at, $latestRevision->created_at])->get();
for ($i=0; $i < count($revisions); $i ) {
Property::find($revisions[$i]->revisionable_id)->update([$revisions[$i]->key => $revisions[$i]->old_value]);
DB::table('revisions')->whereId($revisions[$i]->id)->delete();
}
Что заставляет Laravel генерировать сотни новых таблиц, это потому, что я удаляю модель, которая также вызывается в цикле for в качестве параметра?
Как я могу удалить эти таблицы один раз, а не снова и снова? Но только количество (10)
Пример:
Я начинаю с 30 ревизий, но этот foreach возвращает 187:
$latestRevision = DB::table('revisions')->latest('created_at')->first();
$firstRevision = DB::table('revisions')->find($id);
$revisions = DB::table('revisions')->whereBetween('created_at', [$firstRevision->created_at, $latestRevision->created_at])->get();
$arr = [];
foreach ($revisions as $key => $value) {
array_push($arr, $value);
}
Комментарии:
1. вы имели в виду, что вы удаляете эту ревизию только между заданной датой
2. Да, это должен быть цикл foreach извините за это
Ответ №1:
Вы можете использовать limit() . Этот метод вернет только первые x строк вашего запроса. Попробуйте это:
$revisions = DB::table('revisions')->whereBetween('created_at', [$firstRevision->created_at, $latestRevision->created_at])->limit(10)->get();
Комментарии:
1. Спасибо! Но подсчет был просто примером от меня, чтобы прояснить, что я хочу, чтобы модели внутри цикла foreach удалялись только один раз, а не повторно