PHP 7.4.7 (cli) (built: Jun 12 2020 00:00:24) ( NTS )
Laravel Framework 7.17.2
3.1.19
package не соблюдает глобальные области при экспорте ex.
protected static function booted()
{
static::addGlobalScope('latest_items', function (Builder $builder) {
$builder->latest(
$builder->qualifyColumn('created_at')
);
});
}
запрос правильный напр.
select * from `requests` order by `requests`.`created_at` desc
но экспортированный лист не сортируется.
query
Ожидаемое поведение:
Фактическое поведение:
Мне нужно было бы увидеть немного больше кода, я не уверен, на что указывает «статика», и я не вижу, какой тип запроса вы используете.
запрос прост как Request::query()
а статика - это глобальная область действия модели, пример обновлен
Можете ли вы попробовать поместить эту глобальную область в поставщик услуг, я не уверен, что загруженные обратные вызовы вызываются из-за соображений производительности.
на самом деле booted
- это правильное место https://laravel.com/docs/master/eloquent#global -scopes
Я не говорю, что это не так. Я пытаюсь выяснить, почему его не называют.
да, я понимаю, нп, я попробую.
обратите внимание, что использование через поставщика услуг приведет к тому, что fw потребуется больше времени для разрешения класса и его привязки b4, использующей его.
извините за поздний ответ, попробовал поставщика услуг, но, к сожалению, дал тот же результат.
Вы используете из запроса и должны стоять в очереди?
с использованием FromQuery
да и нет очереди
Я считаю, что проблема связана с функцией экспорта, а не с запросом, потому что я могу получить правильный sql.
Кажется, что методы chunk / chunkById Laravel не уважают глобальные области. Они работают, когда я указываю orderBy в самом запросе.
Вы можете попробовать воспроизвести без этого пакета и увидеть:
$first = Request::query()->first();
Request::query()->chunk(100, function($chunk) use($first) {
// Compare first results
dd($first, $chunk->first());
});
Не уверен, есть ли ошибка в Laravel или он предназначен для такой работы.
Я попытался найти, если у других была такая же проблема, был сделан только один билет, но он был закрыт в тот же день без каких-либо дополнительных подробностей.
может, мы можем попробовать вместо этого использовать курсоры? что лучше, чем разбиение на фрагменты для больших наборов данных.
Это будет по умолчанию в 3.2. Да.
В 3.1 вы можете вернуть курсор в метод сбора
так что эту ошибку нужно исправить в следующей версии, ты имеешь ввиду?
Да, в следующей версии должно работать из коробки
любая оценка, когда это будет?
Извините, у меня нет ETA для этого.
public function collection()
{
return Request::query()->cursor()
}
^ Думаю, тебе этого уже должно хватить
Я не думаю, что это сработает с настройкой запроса, еще раз спасибо, если вы хотите, вы можете закрыть этот билет.
Он заменил бы метод query()
который у вас есть прямо сейчас. Попробуй!