【问题标题】:Laravel 4.1 Raw Query accessing resultLaravel 4.1 原始查询访问结果
【发布时间】:2014-02-11 10:48:34
【问题描述】:

我正在使用 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

感谢任何帮助,谢谢。

【问题讨论】:

    标签: php mysql laravel-4


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢你,祝你有美好的一天:)
    猜你喜欢
    • 2015-01-08
    • 1970-01-01
    • 2015-12-20
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 2018-03-15
    • 2012-10-29
    相关资源
    最近更新 更多