在json列中存储多个对象

问题描述 投票:0回答:1

我有一个带有json列的表格. 我想在Laravel的json列中存储多个对象.

我的json列是这样的 "position":[{"lat" : 500, "lon" : 5000, "date":"2020:04:21 16:58:23"}].

这是一个服务的功能, , 我在我的控制器调用

 public static function savePositionCamion($id_tournee, $position)
    {
        $geoTour = GeoTournee::where('geo_tournee.id_tournee', $id_tournee)->first(['position']);

        if (!$geoTour) {
            $geoTournee = new self();
            $geoTournee->id_tournee = $id_tournee;
            $geoTournee->position = $position;
            return $geoTournee->save() ? $geoTournee : false;
        } else {
            $arr_pos = json_decode($geoTour->position);
            dd($arr_pos);

        }


    }

在控制器中,我调用的函数是这样的

$geoTourne = GeoTournee::savePositionCamion($request->id_tournee, json_encode($request->position));

谁能帮我实现这个目标!谢谢

laravel api
1个回答
2
投票

当处理存储为序列化JSON的列时,数组投递类型特别有用。你有包含序列化JSON的JSON或TEXT字段类型,当你在Eloquent模型上访问该属性时,向该属性添加数组cast将自动反序列化为PHP数组。

class GeoTournee extends Model
{
    ...
    protected $casts = [
        'position' => 'array',
    ];
    ...
}

所以你可以这样保存这个json字段。

$geoTournee->position = $position;
$geoTournee->save();

访问 position 属性,它将自动从 JSON 到一个PHP array. 当您设置了 position 属性,给定的 array 将自动序列化回 JSON 用于存储。

而且你不需要创建 savePositionCamion 功能,您可以使用 firstOrCreate 而不是。

GeoTournee::firstOrCreate(['id_tournee' => $id_tournee], [ 'position' => $position ]);
© www.soinside.com 2019 - 2024. All rights reserved.