web-dev-qa-db-fra.com

Laravel obtenir une "conversion de tableau en chaîne" tout en stockant un tableau dans un champ de base de données Json

J'essaie de sauvegarder un tableau avec des options dans un champ de données json de ma base de données postgres. Je travaille avec Laravel 5.5 et j'utilise l'extension "dimsav/laravel-translatable" pour les traductions.

Ma question type ressemble à ceci: Namespace App;

use Illuminate\Database\Eloquent\Model;
use Dimsav\Translatable\Translatable;

class Question extends Model
{
    use Translatable;
    public $translatedAttributes = ['options', 'answer'];

    protected $casts = [
        'options' => 'array'
    ];
}

Le modèle QuestionTranslation ressemble à ceci:

namespace App;

use Illuminate\Database\Eloquent\Model;

class QuestionTranslation extends Model
{

public $timestamps = false;
public $fillable = ['options', 'answer'];

}

Et l'action de magasin dans QuestionsController:

 public function store(Request $request)
{
    $question = new Question();

    $options[1] = "test1";
    $options[2] = "test2";

    $question->answer = 1;
    $question->options = $options;

    $question->save();

}

Lorsque j'essaie de stocker ces données, le message d'erreur suivant s'affiche:

Illuminate \ Database \ QueryException
Array to string conversion (SQL: insert into "question_translations" ("locale", "answer", "options", "question_id") values (en, 1, test1, 18) returning "id")

Lorsque j'utilise json_encode pour convertir moi-même $ options, je peux le stocker sans problèmes. 

Avez-vous une idée, pourquoi la coulée de laravel ne fonctionne pas? Peut-être à cause de l'extension traduisible?

4
JayEJay
2
JayEJay

Peut-être essayer d'utiliser ceci:

protected $casts = [
    'options' => 'json',
];

Je l’ai testé sur MySQL mais théoriquement, il devrait également fonctionner sur postgresql.

0
Kamil Kiełczewski