【发布时间】:2015-08-12 08:36:51
【问题描述】:
我正在使用 Laravel 5 并尝试返回酒店列表。
我有用户 lat/lng,我正在使用 db::raw 语句来计算从用户到酒店的距离。这部分效果很好,在返回的酒店列表中,我可以轻松列出距离
$hotel->distance;
供参考:
Hotels = Hotel::select(
\DB::raw("*,
( 3959 * acos( cos( radians(" . $lat . ") ) *
cos( radians( lat ) )
* cos( radians( lng ) - radians(" . $lng . ")
) + sin( radians(" . $lat . ") ) *
sin( radians( lat ) ) )
) AS distance"))
->where('live','=', 1)
如您所见,我使用“距离”的别名进行动态计算。同样,这一切都很好,直到现在。现在我正在尝试添加另一个下拉菜单,以便用户可以选择所需的半径(10、20、50、100)英里等。
在构建查询时,我有:
if(isset($search['distance'])) $hotels = $hotels->where('distance', '<=', $search['distance']);
我对一些可选的搜索参数执行此操作,然后在底部对它们进行排序,然后获取结果集:
$hotels = $hotels->get()
我得到的问题是:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'distance' in 'where clause'
原因是,在我执行 where->distance 时,该列还不存在,直到我执行 $hotels->get() 时它才真正出现,那么我有什么选择?
我可以在不按距离过滤的情况下获得结果(很多结果),然后从那里修剪它们,但这似乎没有必要。
有什么想法吗?
【问题讨论】:
-
尝试在列名前加上表名。 “酒店距离”
标签: php mysql laravel laravel-5