Если у меня есть этот запрос:
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
не будут повторно инициализированы, а основной запрос возвращает неверные результаты.
Интересно, есть ли способ переинициализировать обе переменные.