master
cody 3 months ago
parent 67334d9711
commit 75efd86990

@ -140,26 +140,33 @@ class OtherController extends CommonController
$sortName = $all['sort_name'] ?? 'distance'; $sortName = $all['sort_name'] ?? 'distance';
$sortType = $all['sort_type'] ?? 'asc'; $sortType = $all['sort_type'] ?? 'asc';
// 使用稳定的距离计算公式 // 使用简单稳定的距离计算公式
$distanceFormula = " $distanceFormula = "
(6371 * 2 * asin( (6371 * acos(
sqrt( GREATEST(-1, LEAST(1,
pow(sin(radians((CAST(company_latitude AS DECIMAL(10,8)) - ?) / 2)), 2) + cos(radians(?)) *
cos(radians(?)) * cos(radians(CAST(company_latitude AS DECIMAL(10,8)))) * cos(radians(CAST(company_latitude AS DECIMAL(10,8)))) *
pow(sin(radians((CAST(company_longitude AS DECIMAL(10,8)) - ?) / 2)), 2) cos(radians(CAST(company_longitude AS DECIMAL(10,8))) - radians(?)) +
) sin(radians(?)) *
sin(radians(CAST(company_latitude AS DECIMAL(10,8))))
))
)) AS distance )) AS distance
"; ";
$query = Company::with(['users' => function ($query) { $query = Company::with([
$query->with(['courseSigns' => function ($query) { 'users' => function ($query) {
$query->with([
'courseSigns' => function ($query) {
$query->with('course')->orderBy('fee_status', 'desc'); $query->with('course')->orderBy('fee_status', 'desc');
} }
]); ]);
}])->whereHas('users', function ($query) { }
])
->whereHas('users', function ($query) {
$query->where('is_schoolmate', 1); $query->where('is_schoolmate', 1);
})->select('*') })
->selectRaw($distanceFormula, [$latitude, $latitude, $longitude]) ->select('*')
->selectRaw($distanceFormula, [$latitude, $longitude, $latitude])
->where(function ($query) use ($all) { ->where(function ($query) use ($all) {
if (isset($all['company_name'])) { if (isset($all['company_name'])) {
$query->where('company_name', 'like', '%' . $all['company_name'] . '%'); $query->where('company_name', 'like', '%' . $all['company_name'] . '%');

Loading…
Cancel
Save