【问题标题】:manual pagination in laravellaravel 手动分页
【发布时间】:2018-04-26 03:15:45
【问题描述】:

我想为我的选择查询添加 laravel 分页器: 以下查询工作正常,但无法添加 laravel 分页器。

    $results = DB::select('SELECT
    distances.*
FROM
    (SELECT
        ( 6371 * acos( cos( radians(23.0376279 ) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(72.5102283 ) ) + sin( radians(23.0376279 ) ) * sin( radians( latitude ) ) ) ) AS distance,
        shopdatabase.shop_product.stock,
        shopdatabase.shop_product.price AS price,
        shopdatabase.shops.id AS shopId,
        shopdatabase.product.name AS name,
        shopdatabase.product.id AS productId,
        shopdatabase.shops.name AS shopName,
        shopdatabase.shop_product.status,
        shopdatabase.product_image.title AS image,
        shopdatabase.product_meta.metaValue AS sourceDetails,
        shopdatabase.product.sourceUrl
     FROM
        shopdatabase.shop_product
        INNER JOIN shopdatabase.shops
         ON shopdatabase.shop_product.shopId = shopdatabase.shops.id
        INNER JOIN shopdatabase.product
         ON shopdatabase.shop_product.productId = shopdatabase.product.id
        INNER JOIN shopdatabase.product_image
         ON shopdatabase.shop_product.productId = shopdatabase.product_image.productId
        INNER JOIN shopdatabase.product_meta
         ON shopdatabase.shop_product.productId = shopdatabase.product_meta.productId
     WHERE
        shopdatabase.shop_product.status = "active") distances
WHERE
    distance < 20
ORDER BY
    distance ASC');

或者你能告诉我如何用 Eloquent 编写这个选择查询吗? 如果我们可以用 Eloquent 编写上面的代码,那就太好了。

【问题讨论】:

  • 您的代码不可读。首先 - 使用雄辩的关系。

标签: laravel pagination eloquent


【解决方案1】:

Eloquent 通常不是更复杂查询的最佳选择。

正如之前的评论者所提到的,您可以通过建立关系来完善这一点。

但是,您应该能够使用 paginate() 对查询生成器结果进行分页。

DB::select($query)->paginate(25);

另一种选择是在集合上使用 slice()。

$collection = DB::select($query)->get();
$collection->slice(($currentPage-1) * $size, $size);

如果你需要一个分页器来创建链接等,你可以手动创建一个分页器。

new LengthAwarePaginator(
            $collection,
            $total,
            $size,
            $currentPage
        );

【讨论】:

    【解决方案2】:

    我建议你通读 Eloquent 的 Laravel 文档,学习如何正确使用关系。

    查看此资源:https://laravel.com/docs/5.6/eloquent-relationships

    一旦设置好模型关系,您就可以调用此处指定的分页方法:

    https://laravel.com/docs/5.6/pagination

    你应该可以使用这样的东西:

    $foo->with('bar')->paginate();
    

    【讨论】:

      猜你喜欢
      • 2015-01-28
      • 2016-01-26
      • 2015-05-09
      • 2015-05-28
      • 2016-03-18
      • 1970-01-01
      • 2014-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多