我正在使用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
感谢任何帮助,谢谢。
答案 0 :(得分:1)
您的选择列表应该是要选择的列数组(尽管它会将单个字符串转换为单个元素数组):您只列出要返回的一个项目,距离,因此它只会返回该项目....你需要告诉它还要返回所有其他数据列
$places = DB::table('b_details')
->select( array('*', DB::raw($haversine . ' as distance')) )
->orderBy('distance', 'ASC')
->having('distance', '<', $radius)
->get();