ручная нумерация страниц в laravel - PullRequest
0 голосов
/ 25 апреля 2018

Я хочу добавить lagvel paginator для моего запроса select: Приведенный ниже запрос работает нормально, но не может добавить paginator 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.

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Eloquent часто не лучший выбор для более сложных запросов.

Как упоминали ранее комментаторы, вы могли бы уточнить это, установив свои отношения.

Однако вы должны иметь возможность разбивать результаты построителя запросов с помощью paginate ().

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

Другой вариант - использовать slice () для коллекции.

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

Тогда вам понадобится, если вам нужен paginator для создания ссылок и т. Д., Вы можете создать paginator вручную.

new LengthAwarePaginator(
            $collection,
            $total,
            $size,
            $currentPage
        );
0 голосов
/ 25 апреля 2018

Я предлагаю вам прочитать документацию Laravel для Eloquent и научиться правильно использовать отношения.

Ознакомьтесь с этим ресурсом: https://laravel.com/docs/5.6/eloquent-relationships

После настройки отношений модели вы должнызатем сможете вызывать метод paginate, как указано здесь:

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

Вы сможете использовать что-то вроде этого:

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