【问题标题】:Laravel paginate() not limiting results.Laravel paginate() 不限制结果。
【发布时间】:2014-09-07 08:51:43
【问题描述】:

我有一个超过 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 的新功能吗?因为我很确定这种用法在过去可以正常工作。但我必须检查我的旧项目才能确定。

【问题讨论】:

    标签: php mysql laravel-4 pagination


    【解决方案1】:

    我能够通过向 Mysql 数据库中为每个表添加一个复合索引来实现此功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-05
      • 2020-05-07
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      • 2021-01-23
      • 2015-05-31
      • 2017-09-26
      相关资源
      最近更新 更多