Хранить несколько объектов в столбце json - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть таблица с некоторым столбцом json. Я хочу сохранить несколько объектов в столбце json в столбце Laravel.

Мой 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));

любой может помочь мне достичь это ! спасибо в

1 Ответ

2 голосов
/ 23 апреля 2020

Тип приведения массива особенно полезен при работе со столбцами, которые хранятся как сериализованные JSON. У вас есть тип поля JSON или TEXT, который содержит сериализованный JSON, добавление массива, приведенного к этому атрибуту, автоматически десериализует атрибут в массив PHP при обращении к нему в вашей модели Eloquent:

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 ]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...