Laravel paginate()不限制结果。

时间:2014-07-16 17:45:01

标签: php mysql laravel-4 pagination

我有一张超过10k行的表。我需要显示结果,并将使用paginate()来帮助加载。但是,在调用查询时,所有结果都被调用,而不仅仅是paginate()的限制。

   $category = Inventory::join('inventory_categories', 'inventory.sku', '=', 'inventory_categories.sku')
        ->select('inventory_images.image', 'inventory.id' , 'inventory.sku', 'inventory.name', 'inventory.price', 'inventory_categories.category')
        ->leftJoin('inventory_images', 'inventory.sku', '=', 'inventory_images.sku')
        ->where('inventory_categories.category', 'LIKE', '%'.$cat.'%')
        ->where('inventory.active', '=', '0')
        ->where('inventory.stock_quantity', '>', 2)
        ->paginate(16);

当做一个Event :: listen查询时,我得到了回报:注意缺少限制。

array (size=4)
  0 => string 'select count(*) as aggregate from `inventory` inner join `inventory_categories` on `inventory`.`sku` = `inventory_categories`.`sku` left join `inventory_images` on `inventory`.`sku` = `inventory_images`.`sku` where `inventory_categories`.`category` LIKE ? and `inventory`.`active` = ? and `inventory`.`stock_quantity` > ?' (length=321)
  1 => 
    array (size=3)
      0 => string '%SOMETHING%' (length=11)
      1 => string '0' (length=1)
      2 => int 2
  2 => float 82325.11
  3 => string 'mysql' (length=5)

该表格包含30,606个符合此查询的产品。所以它基本上是在显示永远占用的页面之前加载每一行(我认为数组中的浮点数是它花费的时间)。我需要限制结果并正确显示分页。我尝试使用take()但是没有用。这是Laravel 4.2.2的新功能吗?因为我很确定这种用法在过去没有问题。但我必须检查我的旧项目才能确定。

1 个答案:

答案 0 :(得分:0)

我能够通过为每个表的Mysql数据库添加一个复合索引来实现这一点。