Columnas JSON en API Laravel Agregar no insertar

Sep 03 2020

cuando voy a hacer el "agregar" a través de POST, el json no está insertado. Me gustaría insertar en la columna "paramJson" un json a través de api / polls. pero me da problemas

Tengo los siguientes campos:

public function up()
        {
            Schema::create('polls', function (Blueprint $table) { $table->id();
                $table->text('now'); $table->json('paramJson');
                $table->enum('status', ['a', 'b', 'c','d'])->default('a');
            });
        }

Modelo de encuesta:

protected $fillable=[
        'now',
    ];

protected $casts = [
        'paramJson' => 'array',
    ];

PollsController.php

public function add(Request $request)
    {
        $poll = Poll::create($request->all());
        return response()->json($poll, 201);
    }

API de ruta

Route::post('polls','PollsController@add');

Hago la llamada de correoshttp://127.0.0.1:8000/api/polls. donde envío un json de la siguiente manera:

{
 "now": "did the MJ12 exist?",
 "paramJson" : "{"key1": "value1", "key2": "value2"}"
}

da el siguiente error: SQLSTATE[HY000]: Error general: 1364

mientras que si lo inserto asi lo toma:

{
 "now": "did the MJ12 exist?",
 "paramJson" : "{\"key1\": \"value1\", \"key2\": \"value2\"}"
}

SQLSTATE[HY000]: Error general: 1364 Campo 'paramJson'

mientras que si lo inserto desde DB lo veo así

INSERT INTO polls (now, paramJson) values ("did the MJ12 exist?", '{"key1": "value1", "key2": "value2"}') 

"paramJson":"{\"key1\": \"value1\", \"key2\": \"value2\"}",

¿No es posible insertar un json en laravel como este?

Respuestas

2 dewd Sep 02 2020 at 22:39

Parece que su JSON está codificado incorrectamente. Tratar:

{
 "now": "did the MJ12 exist?",
 "paramJson" : {
     "key1": "value1", 
     "key2": "value2"
 }
} 

es decir, deje entre comillas dobles el valor de paramJson. {"key1": "value1", "key2": "value2"}no"{"key1": "value1", "key2": "value2"}"

GianmarcoGagliardi Sep 02 2020 at 22:46

yo cambio

Modelo de encuesta:

protected $fillable=[ 'now', 'paramJson', ]; protected $casts = [
                'paramJson' => 'array',
            ];

funciona