Пагинация Laravel не будет повторно инициализировать переменные MySQL - PullRequest
0 голосов
/ 10 ноября 2018

Если у меня есть этот запрос:

select 
    id,
    @product_rank := IF(@current_category = category_id, @product_rank + 1, 1) AS product_rank,
    @current_category := category_id
from products 

И создать запрос с помощью Eloquent Builder:

Products::from(DB::raw('
    (select 
        id,
        @product_rank := IF(@current_category = category_id, @product_rank + 1, 1) AS product_rank,
        @current_category := category_id
    from products) as q 
'))->where('product_rank', '<=', 10)->paginate(5);

Поскольку пагинация Laravel хочет получить общее количество всех записей, она выполняет дополнительный запрос, подобный этому:

select count(*) as aggregate from (
    select 
        id,
        @product_rank := IF(@current_category = category_id, @product_rank + 1, 1) AS product_rank,
        @current_category := category_id
    from products 
) q where product_rank <= 10

То есть @current_category и @product_rank не будут повторно инициализированы, а основной запрос возвращает неверные результаты.

Интересно, есть ли способ переинициализировать обе переменные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...