当我执行下面的作用域查询时,我没有得到任何结果,但是当我在数据库上执行结果sql(带有转录的绑定)时,我得到了预期的结果。我可以在没有范围的情况下查询模型,结果与预期一致。
这是一个简单的查询,检查一个点是否存在于一个多边形中。我看不到任何错误或例外的迹象。我不知所措。我错过什么了吗?
区域类(带查询范围):
namespace App;
use Illuminate\Database\Eloquent\Model;
use Grimzy\LaravelMysqlSpatial\Eloquent\SpatialTrait;
use Grimzy\LaravelMysqlSpatial\Types\Point;
use Grimzy\LaravelMysqlSpatial\Types\Polygon;
use Grimzy\LaravelMysqlSpatial\Types\Linestring;
class Area extends Model
{
use SpatialTrait;
protected $table = "areas";
protected $spatialFields = [
'point', // MySQL POINT type
'area' // MySQL POLYGON type
];
public function scopeContainsPoint($query, $lat, $lng) {
return $query->whereRaw("ST_Contains(area, GeomFromText('POINT(? ?)'))", [$lng, $lat]);
}
}
查询范围用法和结果:
$s = Area::containsPoint(43.80, -79.48)->get();
=> Illuminate\Database\Eloquent\Collection {#3192
all: [],
}
雄辩的查询日志:
DB::getQueryLog();
=> [
[
"query" => "select * from `areas` where ST_Contains(area, GeomFromText('POINT(? ?)'))",
"bindings" => [
-79.48,
43.8,
],
"time" => 311.05,
],
]
正在恢复sql(返回正确的结果):
select * from `areas` where ST_Contains(area, GeomFromText('POINT(-79.48 43.8)'));
1条答案
按热度按时间z9smfwbn1#
这个问题归结起来就是一个逃避现实的问题
'POINT(-79.48 43.8)'
原始db语句的一部分,由于某些原因没有在DB::getQueryLog()
.更改自:
对此:
已解决问题并返回所需的行。
编辑:另外,对于任何想知道的人-我发现grimzy/laravelmysql空间库包含了我正在寻找的范围(以及其他许多范围)。不过,我还是学到了一些准备好的陈述。务必阅读手册。