laravel 有:找不到列

Posted

技术标签:

【中文标题】laravel 有:找不到列【英文标题】:laravel having: Column not found 【发布时间】:2016-03-03 03:32:59 【问题描述】:

我下面的代码是这样的:

$places = DivePlace::selectRaw("*,(st_distance_sphere( POINT(".$lon.",".$lat.") ,  point(lon, lat))/1000) as distance")
    ->havingRaw("distance < ".$radius)
    ->orderBy("distance")
    ->paginate(10);

没有“haveRaw”一切都很好。 添加后出现如下错误:

SQLSTATE[42S22]:找不到列:1054 中的未知列“距离” '有子句' (SQL: select count(*) as aggregate from dive_places 距离

有什么办法吗?

【问题讨论】:

【参考方案1】:
->where(DB::raw("(ST_Distance_Sphere(POINT(".$lon.",".$lat."), POINT(lon,lat))/1000)"), '<', 200)

而不是-&gt;havingRaw("(st_distance_sphere( POINT(?, ?) , point(lon, lat))/1000) &lt; ?", [$lon, $lat, $radius])

【讨论】:

【参考方案2】:

您需要重复距离定义,因为 Laravel 对分页只使用 count(*) 作为列,所以它应该是:

$places = DivePlace::selectRaw("*,(st_distance_sphere( POINT(".$lon.",".$lat.") ,  point(lon, lat))/1000) as distance")
    ->havingRaw("(st_distance_sphere( POINT(".$lon.",".$lat.") ,  point(lon, lat))/1000) < ".$radius)
    ->orderBy("distance")
    ->paginate(10);

您也可以对查询使用绑定,最好是:

$places = DivePlace::selectRaw("*,(st_distance_sphere( POINT(?, ?) ,  point(lon, lat))/1000) as distance",[$lon, $lat])
    ->havingRaw("(st_distance_sphere( POINT(?, ?) ,  point(lon, lat))/1000) < ?", [$lon, $lat, $radius])
    ->orderBy("distance")
    ->paginate(10);

【讨论】:

嗯...好一点。但是现在出现了这个错误:SQLSTATE[42S22]: Column not found: 1054 Unknown column 'lon' in 'having clause' (SQL: select count(*) as aggregate from dive_places` 有 (st_distance_sphere( POINT(8.39603, 52.61997) , point( lon, lat ))/1000) @MathisLogemann 您的dive_places 表中有lon 列吗?我使用了您问题中的名称,也许应该是 long

以上是关于laravel 有:找不到列的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 找不到列:'full_name'

Laravel - 找不到路线

Laravel 5 和 Laravel 5.1 “找不到类‘模型名称’”,有更好的解决方案吗?

Laravel 5:找不到 DB 种子类

Laravel 5找不到css文件

Laravel,NPM:找不到命令“mix”