You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Eloquent与原生SQL提取MySQL JSON中的地址经纬度字段

从MySQL JSON字段提取地址信息用于地图仪表盘

我来帮你搞定从MySQL存储的JSON地址数据里提取name、纬度lat和经度lng的需求,不管是用原生SQL还是Laravel Eloquent都有对应的方案,下面给你详细示例:

原生SQL查询方案

MySQL 5.7+支持JSON字段操作,你可以用->>操作符(或者JSON_UNQUOTE(JSON_EXTRACT()))直接提取JSON中的嵌套字段,这个操作符会自动去除结果的引号,直接返回纯文本/数值:

SELECT
  address_column->>'$.name' AS name,
  address_column->>'$.latlng.lat' AS lat,
  address_column->>'$.latlng.lng' AS lng
FROM
  your_table_name;

注意:把address_column换成你实际存储JSON数据的字段名,your_table_name换成对应的表名

Laravel Eloquent查询方案

如果用Laravel的Eloquent ORM,有两种常用方式可以实现:

方法一:直接使用selectRaw复用SQL逻辑

$mapmarkerscalc = DB::table('your_table_name')
    ->selectRaw("address_column->>'$.name' as name")
    ->selectRaw("address_column->>'$.latlng.lat' as lat")
    ->selectRaw("address_column->>'$.latlng.lng' as lng")
    ->get();

方法二:结合模型JSON字段映射(更优雅)

先在你的模型类里把JSON字段声明为数组类型,让Laravel自动处理转换:

// 你的模型文件,比如Address.php
class Address extends Model
{
    protected $casts = [
        'address_column' => 'array', // 将JSON字段映射为PHP数组
    ];
}

然后就可以用更简洁的查询写法:

$mapmarkerscalc = Address::selectRaw("
    address_column->>'$.name' as name,
    address_column->>'$.latlng.lat' as lat,
    address_column->>'$.latlng.lng' as lng
")->get();

这样查询出来的$mapmarkerscalc集合里的每个对象都会包含name、lat和lng字段,直接就能用于地图仪表盘的标记渲染啦。

内容的提问来源于stack exchange,提问作者Braedon Saunders

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:27:05