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?
J'ai eu de l'aide ici:
Utiliser cette solution fonctionne
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.