在 Laravel Eloquent ORM 中处理 Mysql Spatial 数据类型

2024-01-07

如何在 eloquent ORM 中处理 mysql 空间数据类型?,这包括如何创建迁移、插入空间数据和执行空间查询。如果没有实际的解决方案,是否有任何解决方法?


我不久前实施的一个解决方法是在模型上设置纬度和经度字段,并进行以下验证(请参阅验证器类 http://laravel.com/docs/5.0/validation):

$rules = array('latitude' => 'required|numeric|between:-90,90',
                            'longitude'=>'required|numeric|between:-180,180',)

魔法降临了启动方式 http://laravel.com/docs/5.0/eloquent#model-events模型的,设置空间点场的正确值:

/**
 * Boot method
 * @return void
 */
public static function boot(){
    parent::boot();
    static::creating(function($eloquentModel){

        if(isset($eloquentModel->latitude, $eloquentModel->longitude)){
            $point = $eloquentModel->geoToPoint($eloquentModel->latitude, $eloquentModel->longitude);
            $eloquentModel->setAttribute('location',  DB::raw("GeomFromText('POINT(" . $point . ")')") );
        }

    });

    static::updated(function($eloquentModel){

        if(isset($eloquentModel->latitude, $eloquentModel->longitude)){
            $point = $eloquentModel->geoToPoint($eloquentModel->latitude, $eloquentModel->longitude);
            DB::statement("UPDATE " . $eloquentModel->getTable() . " SET location = GeomFromText('POINT(" . $point . ")') WHERE id = ". $eloquentModel->id);
        }

    });
}

关于迁移,就像 @jhmilan 所说,您始终可以使用 Schema::create 和 DB::statement 方法来自定义迁移。

Schema::create('locations', function($table){
        $table->engine = "MYISAM";
        $table->increments('id')->unsigned();
        $table->decimal('latitude', 10, 8); 
        $table->decimal('longitude', 11, 8);
        $table->timestamps();
    });

    /*Espatial Column*/
    DB::statement('ALTER TABLE locations ADD location POINT NOT NULL' );
    /*Espatial index (MYISAM only)*/
    DB::statement( 'ALTER TABLE locations ADD SPATIAL INDEX index_point(location)' );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Laravel Eloquent ORM 中处理 Mysql Spatial 数据类型 的相关文章

随机推荐

  • iTunes Connect - 无法邀请预发行应用程序的“内部测试人员”

    我的应用程序已获准通过新的 Apple TestFlight 应用程序进行分发 我试图通过邀请 内部测试员 iTunes Connect gt Prerelease gt Internal Testers但我看到的只是两个信息框 要开始测试
  • Pycharm 不接受“list[Example]”作为项目列表的类型提示[重复]

    这个问题在这里已经有答案了 我在 PyCharm 中发现了一个奇怪的类型 Example是我自己的班级 但我想这并不那么重要 因为 IDE 正在抱怨list类型没有定义 getitem 这是不正确的方法 我想知道这是一个错误还是我以错误的方
  • Magento - 对自定义报价总计字段应用税

    我为 Magento 创建了一个附加费模块 它在报价中添加了一个自定义总计字段 附加费含税输入到 Magento 中 我已成功获取将附加费添加到报价中的模块 并且结帐页面上的总计是正确的 当我尝试对附加费征税 以便将其包含并显示在结账页面的
  • jQuery Ajax Post 与数据

    当使用某些参数单击按钮时 我尝试调用 PHP 文件 它一直执行到 jsfile js 中的警报语句为止 之后ajax部分没有被执行 帮助我 主要 html
  • 当应用程序在后台运行时获取 GPS 位置更新

    我有一个 Android 应用程序 可以跟踪客户位置并每 10 秒发送一次位置 但是 在 android O 中 位置更新每小时会获得几次 正如有关 android O 中 GPS 位置更新限制的文档中所述 无论如何 为了克服这个问题 我使
  • C/C++ MPI 加速未达到预期

    我正在尝试编写一个 MPI 应用程序来通过计算机集群加速数学算法 但在此之前我正在做某种基准测试 但最初的结果并不像预期的那么好 测试应用程序在 4 核时具有线性加速 但 5 6 核并未加速应用程序 我正在使用 Odroid N2 平台进行
  • 在 Sympy.mpmath.plot 中更改图形大小

    我希望这个问题不是太初级 我已经广泛搜索了解决方案 但尚未找到 我最近开始使用 Jupyter Notebook 和 Sympy 在微积分 II 课上做笔记和做作业 这真是一个巨大的好处 然而 我唯一的问题是我无法弄清楚如何配置绘图的大小
  • 什么是堆栈溢出?

    什么是堆栈溢出错误 它可能出现在什么类型的程序 编程语言中 它不太可能出现在 Web 应用程序代码中吗 From 维基百科 http en wikipedia org wiki Stack overflow 在软件中 会发生堆栈溢出 当内存
  • 如果一个代理关闭,流应用程序中的 KafkaStream EXACTLY_ONCE 会导致重新平衡失败

    我有一个 Kafka 流应用程序 其中 kafka streams 和 kafka clients 均为 2 4 0 具有以下配置 properties put StreamsConfig BOOTSTRAP SERVERS CONFIG
  • jquery mouseover 和 mouseout 错误

    当我滚动一个元素 以查看包含该元素的总体数据 时 我试图获得某些内容的预览 并且当我推出时 一切都恢复原样 问题是 当我快速移动鼠标光标时 有时鼠标移出方法不会发生 并且数据保持更新 但我不希望出现这种情况 知道我该怎么做吗 documen
  • 垃圾收集期间崩溃的原因

    一段时间以来 我一直在努力解决 C 应用程序崩溃的问题 该应用程序也使用相当多的 C CLI 模块 这些模块主要是本地库的包装器来访问设备驱动程序 崩溃并不总是很容易重现 但我能够收集六个崩溃转储 这些崩溃转储表明程序总是在垃圾收集期间因访
  • ipsec.py 找不到属性 IPPROTO_IP 和 socket.IPPROTO_IP

    我安装了 python 2 6 的模块 scapy 当我导入此模块时 我收到此警告 警告 无法导入层 ipsec 模块 对象没有属性 IPPROTO AH 我查看了套接字属性 但没有找到 IPPROTO AH 属性 此外 我尝试编辑模块 i
  • 如何在shell脚本中从fork子进程获取PID

    我相信我可以从父进程派生出 10 个子进程 下面是我的代码 bin sh fpfunction n 1 while n lt 20 do echo Hello World n times sleep 2 echo Hello World2
  • Android Studio Windows:调试器进程已完成,退出代码为 -1073741515 (0xC0000135)

    我的应用程序中有本机代码和 Java 因此我需要能够调试 Java 和本机代码 升级到 Android Studio Bumblebee 后 2021 1 1 补丁 2 我无法再在启用本机调试的情况下调试我的应用程序 如果 调试类型 设置为
  • 添加 DOM 元素,正确的方法是什么?

    这个问题可能很愚蠢 或者很基本 有人可以解释一下添加 DOM 元素的最佳方法是什么吗 我们有两种添加 DOM 元素的方法 设想 需要添加 strong Hi strong 在现有的 div div 通过编辑其中的 HTML document
  • 如何将图像从 Applet 传递到 JSF 支持 bean

    我正在使用一个 Web 应用程序 其中有一个 Java Applet 可以将 wacom 设备中的图像捕获到RenderedImage目的 applet 本身嵌入到 JSF 2 0 页面中 我需要传递创建的RenderedImage从 Ap
  • POD 类已初始化,并已初始化放置新默认值?

    如果我使用新的放置来初始化 POD 类 我可以假设内存将默认初始化 为零 吗 这个资源 http www fnal gov docs working groups fpcltf Pkg ISOcxx doc POD html明确指出 如果您
  • 将表重命名为 'NOW() + old_table_name'

    是否可以以某种方式使用 NOW 函数或类似的 MYSQL rename table 函数 我需要这个的原因是因为我们不喜欢立即删除旧表 而是先重命名 然后重命名为 old 日期表已停止使用 table name 因此 当我们实际删除它时 我
  • 错误:提交请求后无法执行此操作

    我写过关于httpwebrequest and httpwebresponse 我需要将数据发送到服务器 但收到此异常 提交请求后无法执行此操作 看下面的代码 HttpWebRequest request HttpWebRequest We
  • 在 Laravel Eloquent ORM 中处理 Mysql Spatial 数据类型

    如何在 eloquent ORM 中处理 mysql 空间数据类型 这包括如何创建迁移 插入空间数据和执行空间查询 如果没有实际的解决方案 是否有任何解决方法 我不久前实施的一个解决方法是在模型上设置纬度和经度字段 并进行以下验证 请参阅验