2014-02-11 2 views
0

Я использую формулу Haversine создать близлежащую функцию в Laravel 4.1, мое сырье запрос:Laravel 4,1 Сырой Запрос доступ результата

$haversine = '(3959 * acos(cos(radians(' . $lat . ')) * cos(radians(lat)) * cos(radians(lng) - radians(' . $lng . ')) + sin(radians(' . $lat . ')) * sin(radians(lat))))'; 

    $places = DB::table('b_details') 
     ->select(DB::raw($haversine . ' as distance')) 
     ->orderBy('distance', 'ASC') 
     ->having('distance', '<', $radius) 
     ->get(); 

    foreach ($places as $place) { 
     var_dump($place); 
    } 

это только возвращает результат вычисления, как так:

object(stdClass)[231] 
    public 'distance' => float 0.037140269070672 
object(stdClass)[232] 
    public 'distance' => float 0.093237928677323 
object(stdClass)[233] 
    public 'distance' => float 0.4404396657947 

Я не могу получить доступ к больше данных, например:

foreach ($places as $place) { 
     var_dump($place->name); 
    } 

производит эту ошибку:

Undefined property: stdClass::$name 

Любая помощь приветствуется, благодарю вас.

ответ

1

Ваш выбранный список должен быть массивом столбцов для выбора (хотя он преобразует одну строку в один массив элементов): вы указываете только один элемент для возврата, расстояние, поэтому оно будет возвращать только тот пункт .... вам нужно сообщить об этом, чтобы вернуть все остальные столбцы данных, а также

$places = DB::table('b_details') 
    ->select(array('*', DB::raw($haversine . ' as distance'))) 
    ->orderBy('distance', 'ASC') 
    ->having('distance', '<', $radius) 
    ->get(); 
+0

Спасибо, отлично провели день :) – Moe

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