使用select时,laravel中的rawquery失败

时间:2017-02-01 20:43:33

标签: sql laravel

这是我的代码:

public function scopeClosest($query, $lat, $lng)
{
    return $query->selectRaw(
        'Select * , ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance'
    );

}

如果我运行它,我会收到此错误:

  

语法错误或访问冲突:1064 SQL语法中出错;查看与您的MariaDB服务器版本对应的手册,以便在#39;选择*(3959 * acos(cos(弧度(37))* cos(弧度(纬度))* cos(弧度'在第1行

如果我删除Select *,它看起来像这样:

return $query->selectRaw(
            '( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance'
        );

没有产生错误,我得到5个对象,但它们只包含这样的距离:

  #items: Collection {#377 ▼
    #items: array:5 [▼
      0 => Listing {#378 ▼
        #connection: null
        #table: null
        #primaryKey: "id"
        #keyType: "int"
        #perPage: 15
        +incrementing: true
        +timestamps: true
        #attributes: array:1 [▼
          "distance" => 5511.8536628578
        ]

1 个答案:

答案 0 :(得分:1)

我不确定但是试试这个:

return $query->selectRaw(
    '*, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance'
);