Как разбить красноречивый запрос с помощью формулы haversine

Я делаю поисковый запрос по расстоянию и поисковому запросу, но при использовании «Имея» в eloquent стандартная нумерация страниц больше не работает.

Вот мой код:

    $haversine = '( 3959 * acos( cos( radians(?) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(?) ) + sin( radians(?) ) * sin( radians( latitude ) ) ) )';
$stores = Store::select(
DB::raw("*, $haversine AS distance"))
->having("distance", "<", $input['distance'])
->orderBy("distance")
->setBindings(array(
$latitude,
$longitude,
$latitude
))
->with(array(
'offers' => function($query) {
if(Input::has('term')) {
$query->whereHas('product', function ($product_query) {
$product_query->where(function($term_query) {
$fields = array('name', 'description','model_number');
foreach($fields as $field) {
$term_query->orWhere($field, 'LIKE', '%' . Input::get('term') . '%');
}
$term_query->orWhereHas('brand', function($brand_query) {
$brand_query->where('name', 'LIKE', '%' . Input::get('term') . '%');
});
});
});
}
$query->orderBy('price', 'ASC');
})
)
->get();

Этот запрос прекрасно работает без нумерации страниц, но при попытке стандартного
->paginat(10) Я получаю следующее:

SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец «расстояние» в «имеющем предложении» (SQL: выберите количество (*) в качестве агрегата из stores имеющий distance < 26,1817)

Я много раз искал этот ответ, но я не уверен, почему найденные мной решения не работают для меня.

Я уже посмотрел на:
https://github.com/laravel/framework/issues/3105

а также

Как использовать paginate () с предложением has (), когда столбца в таблице нет

Пожалуйста, дайте мне несколько советов, если вы уже сталкивались с этой проблемой в прошлом.

Редактировать:

Вот код, который я пробовал, но у меня не получилось.

$current_page = Paginator::getCurrentPage();
$paginated_query = clone $stores;
$paginated_query->addSelect('stores.*');

$items  = $paginated_query->forPage($current_page, 10)->get();
$totalResult = $stores->addSelect(DB::raw('count(*) as count'))->get();
$totalItems = $totalResult[0]->count;

$stores = Paginator::make($items->all(), $totalItems, 10);

0

Решение

У меня была такая же проблема с нумерацией страниц с использованием предложения «Имея» в eloquent.

Это сработало для меня:

Вместо использования псевдонима столбца в предложении «using» используйте фактический расчет.

Вместо:

$model->select(DB::raw("*, $haversine AS distance"))->having("distance", "<", $input['distance']);

Попробуй это:

$model->select("*")->having(DB:raw($haversine), "<", $input['distance']);
-1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]