public static function Search($input)
{
$date = \Carbon\Carbon::now()->subMinute(30);
$query = User::rightJoin('user_profiles', 'users.id', '=', 'user_profiles.user_id');
if (isset($input ['minAge']) && $input['minAge']) {
$minAge = $input['minAge'];
$maxDate = \Carbon\Carbon::today()->subYears($minAge)->endOfDay();
}
if (isset($input ['maxAge']) && $input['maxAge']) {
if ($input['maxAge'] < $input['minAge']) {
$maxAge = $input['minAge'];
}
else {
$maxAge = $input['maxAge'];
}
$minDate = \Carbon\Carbon::today()->subYears($maxAge + 1);
}
if (isset($input['u']) && $input['u'])
$query->where('users.username', '=', $input['u']);
if (isset($input['p']) && $input['p'])
$query->where('user_profiles.postcode', '=', $input ['p']);
if (isset($input['o1']) && $input['o1'])
$query->where('users.last_online','>=',$date);
if (isset($input['o2']) && $input['o2'])
$query->whereNotNull('user_profiles.avatar');
if (isset($input ['o3']) && $input['o3'])
$query->orderBy('users.type', 'ASC');
if (isset($input ['minAge']) && $input['minAge'])
$query->whereBetween('user_profiles.dob', [$minDate, $maxDate]);
if (isset($input ['g']))
$query->whereIn('user_profiles.gender',$input ['g']);
if (isset($input ['d']))
$query->select('user_profiles.lat, user_profiles.long
(6371 * acos(cos(radians(?)) *
cos(radians(lat))
* cos(radians(long) - radians(?)
) + sin(radians(?)) *
sin(radians(lat)))
) AS distance'
)
->having("distance", "<", "?")
->orderBy("distance")
->setBindings([$input['lat'], $input['long'], $input['lat'], $input['d']]);
$query->orderBy('users.last_online', 'DESC');
$users = $query->paginate(10);
return $users;
}
Burada (isset ($ input ['d'])) varsa, bu, 5kms için 5 ve 10kms için 10, vb. Gibi seçeneklerin ayarlandığı kullanıcının seçtiği uzaklık seçimimdir.
Sorguyu araştırdığımda sütun mesafesinin mevcut olmadığını ve yok olduğunu söylediği zaman, kullanıcıların boylamı ve enlemi arasındaki mesafeyi belirleme konusundaki tüm matematik düşüncesini düşündüm.
Yani $ query-> DB :: ham() ?? Çünkü bunu birleştirme deyimini kullanırken deniyorum ve bu mümkün değilse emin değilim. –
Bu yüzden kendi üzerinde çalışıyorum, ancak bunu tüm sorguyla birleştirmek istiyorum ve nasıl çalışacağından emin değilim. tüm sorguya, örneğin, $ query = DB :: select ($ query-> DB :: select olarak –