我想为我的选择查询添加laravel paginator: 以下查询工作正常,但无法添加laravel paginator。
$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编写上面的代码,那将是很好的。
答案 0 :(得分:0)
我建议你仔细阅读Lalovel文档中的Eloquent,并学习如何正确使用关系。
查看此资源:https://laravel.com/docs/5.6/eloquent-relationships
设置模型关系后,您应该可以调用此处指定的paginate方法:
https://laravel.com/docs/5.6/pagination
你应该能够使用这样的东西:
$foo->with('bar')->paginate();
答案 1 :(得分:0)
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
);