Laravel 4.1 Raw Query访问结果

时间:2014-02-11 10:48:34

标签: php mysql laravel-4

我正在使用Haversine公式在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 个答案:

答案 0 :(得分:1)

您的选择列表应该是要选择的列数组(尽管它会将单个字符串转换为单个元素数组):您只列出要返回的一个项目,距离,因此它只会返回该项目....你需要告诉它还要返回所有其他数据列

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