2014-02-10 4 views
0

В настоящее время я пытаюсь построить необработанный запрос для получения поблизости, вот моя попыткаLaravel 4 сырым запрос об ошибке

$places = DB::select('select * from b_details where(3959 * acos(cos(radians(37)) * cos(radians(lat = ?)) * cos(radians(lng = ?) - radians(-122)) + sin(radians(37)) * sin(radians(lat)))) 
as distance from b_details having distance < radius = ? order by distance LIMIT 0 , 20', array($lat, $lng, $radius)); 

Я также попытался:

$disctance_select = sprintf(
     "(3959 * acos(cos(radians(%s)) " . 
     " * cos(radians(lat)) " . 
     " * cos(radians(lng) - radians(%s)) " . 
     " + sin(radians(%s)) * sin(radians(lat)) " . 
     ") " . 
     ") " . 
     "AS distance", 
     $lat, 
     $lng, 
     $lat 
    ); 

    return DB::table('b_details') 
     ->having('distance', '<', $radius) 
     ->orderBy('distance', 'ASC') 
     ->get(array('*',$disctance_select)); 

Это держит ошибки продуцирующих:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax 

это запрос мой пытается скопировать для использования с Laravel 4:

SELECT id, (3959 * acos(cos(radians(37)) * cos(radians(lat)) * cos(radians(lng) - radians(-122)) + sin(radians(37)) * sin(radians(lat)))) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20; 

всякая помощь приветствуется, спасибо.

+0

Пожалуйста, проверьте ответ ниже Mr.Joe –

ответ

1

Просьба проверить это: Это действительно работает :)

$result = Listing::select(
      DB::raw("*, 
          (6371 * acos(cos(radians(?)) * 
          cos(radians(lat)) 
          * cos(radians(lon) - radians(?) 
          ) + sin(radians(?)) * 
          sin(radians(lat))) 
         ) AS distance")) 
      ->having("distance", "<", $radius) 
      ->orderBy("distance") 
      ->setBindings([$lat, $lon, $lat]) 
      ->get(); 
0

Вы сделали select *, а затем where, а затем calculated column. Вы должны поставить расчетную колонку distance перед пунктом where.

Почему вы не можете просто вставить запрос, который вы пытаетесь скопировать, в качестве первого параметра в Laravel DB:select? Я в замешательстве, почему вы измените его.

Смежные вопросы