我有一些模型使用了像POINT
、POLYGON
或MULTIPOLYGON
这样的地理空间字段。我想告诉我的模型以一种特殊的方式处理这些属性,以便我获得所需的模型属性集。
示例:每个常规的Model::find()
或其他Eloquent方法都应该在存储或检索数据库值之前应用一些自定义代码。$area->surface
在MySQL中是一个POLYGON
字段,但在我的模型类中,我希望将$area->surfare
处理为一个点数组。
因此,在SELECT
上,我想1)使用原始表达式获取值以获得值的文本表示,2)通过一些自定义PHP代码将WKT字符串转换为数组。
在INSERT/UPDATE
上,我想获取属性值(一个数组),并1)将其转换为WKT字符串,然后2)使用存储该值的DB原始语句将其写入数据库。
我想在一个字段的基础上设置它,而不是为每个字段设置特殊的get/set函数,也不是在控制器中-因为我有很多geospatial字段。
在Laravel中有没有实现这个的方法?
- (同一问题的一个更抽象的版本是,我如何创建代码来操作实际SQL查询的属性值,而不仅仅是通过mutator和accessors进行一些基于值的操作)*
**更新:**深入查看Laravel Doc和API,发现可能需要操作的是Eloquent::newQuery()
方法?无论SELECT
,INSERT
还是UPDATE
,都可以使用它进行查询吗?
4条答案
按热度按时间vfh0ocws1#
我们现在已经通过使用以下函数扩展我们的基础模型来解决所有模型的一般性问题:
下面是我们现在使用的基本模型的摘录:
kpbwa7wx2#
如果mutator和accessor不符合您的需要,您可以使用ModelEvents操作这些属性。
然后,您可以在触发某些Eloquent事件时执行代码:创建、已创建、更新、已更新、保存、已保存、删除、已删除、恢复、已恢复。
vfh0ocws3#
您可以使用非常酷的包为点git package
安装
示例:
创建迁移
运行迁移
创建场所模型
填充
$fillable
和$casts
数组,并在新模型中使用HasSpatial trait:创建对象
此外,软件包具有不同的有用methods with examples
yyhrrdl84#
对于所有使用postgres数据库的人,laravel-postgis可以用于几何数据