2016-04-03 26 views
3
uzaklığa göre arama, ben tür burada bu çalışma almak ama nasıl Kayboldum Ne sahip Hey yüzden tüm kullanıcıdan mesafesi dışında mükemmel çalışıyor Bu arama formu var olduğunu

laravel kullanıcıları

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.

cevap

1

Kodun etrafına sarmak için DB::raw() kullanmanız gerekir.

görünüyor buradan kodunuzu kopyalanmış ama çiğ açıklama kaldırıldı gibi: http://laravel.io/forum/04-23-2014-convert-this-geolocation-query-to-query-builder-for

+0

Yani $ query-> DB :: ham() ?? Çünkü bunu birleştirme deyimini kullanırken deniyorum ve bu mümkün değilse emin değilim. –

+0

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 –