Laravel имеющий: столбец не найден
Мой следующий код выглядит так:
$places = DivePlace::selectRaw("*,(st_distance_sphere( POINT(".$lon.",".$lat.") , point(lon, lat))/1000) as distance")
->havingRaw("distance < ".$radius)
->orderBy("distance")
->paginate(10);
без "hasRaw" все хорошо. После добавления возникла следующая ошибка:
SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец "расстояние" в "имеющем предложении" (SQL: выберите количество (*) в качестве агрегата из
dive_places
имея расстояние < 300)
Любое решение?
2 ответа
Решение
->where(DB::raw("(ST_Distance_Sphere(POINT(".$lon.",".$lat."), POINT(lon,lat))/1000)"), '<', 200)
вместо ->havingRaw("(st_distance_sphere( POINT(?, ?) , point(lon, lat))/1000) < ?", [$lon, $lat, $radius])
Вам нужно повторить определение расстояния, потому что для пагинации Laravel использует только count(*)
для столбцов так и должно быть:
$places = DivePlace::selectRaw("*,(st_distance_sphere( POINT(".$lon.",".$lat.") , point(lon, lat))/1000) as distance")
->havingRaw("(st_distance_sphere( POINT(".$lon.",".$lat.") , point(lon, lat))/1000) < ".$radius)
->orderBy("distance")
->paginate(10);
Вы также можете использовать привязки для запроса, поэтому лучше будет:
$places = DivePlace::selectRaw("*,(st_distance_sphere( POINT(?, ?) , point(lon, lat))/1000) as distance",[$lon, $lat])
->havingRaw("(st_distance_sphere( POINT(?, ?) , point(lon, lat))/1000) < ?", [$lon, $lat, $radius])
->orderBy("distance")
->paginate(10);