php - Laravel paginate() 不限制结果。

标签 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 查询时,我得到以下返回:注意缺少 Limit。

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

最佳答案

我可以通过为每个表向 Mysql 数据库添加复合索引来使其工作。

关于php - Laravel paginate() 不限制结果。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24787352/

相关文章:

php - 如何为 Laravel 验证设置自定义属性而不是数字键?

php - 使用 PHP 将图像上传到文件夹,同时将描述保存到数据库

php - 将命令行curl转换为PHPcurl函数

php - 如何处理 Twig 中的特殊符号

php - Concrete5 5.6/7 以编程方式添加用户和丰富属性

c# - 如何修复此 MySql 异常? [C#]

php - 元刷新标记 "break"PHP session 吗?

PHP 身份验证页面不会将用户输入与数据库中存储的数据进行匹配

php - Composer 更新无法更新 Laravel 依赖项

php - 拉拉维尔 4 : Controller Method Not Found