मैं Laravel के साथ एक टिकट प्रणाली बनाना चाहता हूँ। मैं चैट डेटा को जेसन डेटा प्रकार में संग्रहीत करता हूं। जब उपयोगकर्ता उसे टिकट भेजना चाहता है तो मैं उसका डेटा प्राप्त करता हूं और उसे इन कोडों के साथ संग्रहीत करता हूं:

$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
Farzin Bidokhti 29 फरवरी 2020, 20:34
कृपया अपना वर्तमान अपडेट फ़ंक्शन पोस्ट करें।
 – 
Hafez Divandari
29 फरवरी 2020, 20:40
मेरे प्रश्न में अद्यतन कोड जोड़ें।
 – 
Farzin Bidokhti
29 फरवरी 2020, 20:44

2 जवाब

MySQL जेसन कॉलम का समर्थन करता है। आप लार्वेल में जोंस कॉलम बना और अपडेट कर सकते हैं जैसा कि नीचे दिखाया गया है।

$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 Columns और JSON कॉलम अपडेट करना भी

1
Afraz Ahmad 29 फरवरी 2020, 20:50

आपके पास 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 कॉलम और जेसन कॉलम अपडेट करना

  2. MySql का उपयोग करें JSON_ARRAY_APPEND एक कच्ची क्वेरी पर कार्य करता है।

3
Hafez Divandari 29 फरवरी 2020, 21:42
प्रिय हाफ़िज़, मैंने 1 तरीके का उपयोग किया, लेकिन मुझे यह त्रुटि मिली: [] ऑपरेटर स्ट्रिंग्स के लिए समर्थित नहीं है, यह त्रुटि $messages[] = ... की ओर इशारा करती है।
 – 
Farzin Bidokhti
29 फरवरी 2020, 21:25
लगता है आपको json_decode अपने संदेशों की आवश्यकता है, मेरे अद्यतन उत्तर की जांच करें।
 – 
Hafez Divandari
29 फरवरी 2020, 21:43