我有一个带有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));
谁能帮我实现这个目标!谢谢
当处理存储为序列化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 ]);