Как я могу обновить json данные в MySQL с помощью Laravel framework? - PullRequest
0 голосов
/ 29 февраля 2020

Я хочу создать систему тикетов с Laravel. Я сохраняю данные чата в json типе данных. когда пользователь хочет отправить ее / его билет, я получаю ее / его данные и сохраняю их с этим кодом:

$messages = array([
    'message_title' => post('message_title'),
    'message_body' => post('message_body'),
    'type' => 'q',
    'created_at' => date('Y/m/d H:i:s'),
]);

$messagesToJson = json_encode($messages);
$query = DB::table('test')->insert([
    'level_id' => post('message_level'),
    'status' => 0,
    'ticket_id' => post('user_id') . time(),
    'user_id' => post('user_id'),
    'backend_user_id' => '',
    'messages' => $messagesToJson,
]);

эти данные хранятся в MySQL:

[
    {"message_title":"This is title","message_body":"Some text ... .","type":"q","created_at":"2020\/02\/29 20:42:26"}
]

Но мои проблема заключается в следующем: когда пользователь хочет задать новый вопрос в этом билете, как я могу вставить новый объект в этот массив следующим образом:

[
    {"message_title":"This is title","message_body":"Some text ... .","type":"q","created_at":"2020\/02\/29 20:42:26"},
    {"message_title":"Question 2","message_body":"Some text in question 2 ... .","type":"q","created_at":"2020\/02\/29 21:42:26"}
]

Мой код обновления:

$messages = array(
    'message_body' => post('sendText'),
    'type' => 'q',
    'created_at' => date('Y/m/d H:i:s'),
);

$messagesToJson = json_encode($messages);
$updateQuery = DB::update("UPDATE synon_subsystem_ticketing
                  SET messages = JSON_SET(messages, '$[$countMessages]', '$messagesToJson') WHERE id = '$id'");

Ответы [ 2 ]

2 голосов
/ 29 февраля 2020

У вас есть 2 варианта:

  1. Получить текущее значение, добавить свое сообщение и обновить:

    $tiket = DB::table('synon_subsystem_ticketing')->find($id);
    
    $messages = json_decode($ticket->messages) ?? []; //json_decode is not necessary if you're using attribute casting on your model
    $messages[] = array(
        'message_body' => post('sendText'),
        'type' => 'q',
        'created_at' => date('Y/m/d H:i:s'),
    );
    $messages = json_encode($messages); //json_encode is not necessary if you're using attribute casting on your model
    
    DB::table('synon_subsystem_ticketing')
        ->where('id', $id)
        ->update(['messages' => $messages]);
    

    Примечание: отметьте Laravel документы на json столбец при миграциях и обновление json столбец

  2. Использование функции MySql JSON_ARRAY_APPEND в необработанном виде запрос.

1 голос
/ 29 февраля 2020

MySQL поддерживает json столбцы. Вы можете создавать и обновлять столбцы json в laravel, как показано ниже.

$table->json('tickets_user_info'); // in your migration create json column.

//Update it as shown below.
$affected = DB::table('users')
          ->where('id', 1)
          ->update(['tickets_user_info' => 'what_ever_you_want_to_save_here']);

Вы можете создавать новый массив, включающий старые данные, и обновлять столбец json всеми данными.

Чтение laravel * Запрос Json Столбцы и Обновление JSON Столбцы также

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...