@Hfnas

Почему Limit & offset не выбирает все записи в цикле?

$count=Ship::where("updated_at",">", "2024-01-01 00:00:00")->count();
        $skip=0;
        $take=10;

        while ($count>0){
            $count=$count-$skip;
            $dem=Ship::where("updated_at",">", "2024-01-01 00:00:00")
                ->skip($skip)
                ->take($take)->get();


           foreach ($dem as $item){
            }
            $skip= $skip+$take;
        }

но если использовать
$dem=Ship::where("updated_at",">", "2024-01-01 00:00:00")->get();
  foreach ($dem as $item){
  }

обрабатывает все.
  • Вопрос задан
  • 64 просмотра
Решения вопроса 2
@Giperoglif
вы отнимаете от $count числа кратные 10ти, для того, чтобы пройти гарантированно всё у вас и $count должен быть кратен 10ти. в какой-то момент вконце $count у вас становится отрицательным и вы теряете то кол-во записей, чему он равен.

сделайте while(true) и выход из цикла по условию count($dem) === 0
Ответ написан
iMedved2009
@iMedved2009
Не люблю людей
Chunk

Ship::where("updated_at",">", "2024-01-01 00:00:00")->chunk(10, function (Collection $ships) {
    foreach ($ships as $ship) {

    }
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы