2017-12-29 31 views
1

Ich versuche ein Array mit Optionen in ein JSON-Datenfeld meiner Postgres-Datenbank zu speichern. Ich arbeite mit Laravel 5.5 und verwende die Erweiterung "dimsav/laravel-translatable" für Übersetzungen.Laravel bekomme eine "Array to string conversion" beim Speichern eines Arrays in einem JSON-Datenbankfeld

Mein Modell Frage sieht so aus: 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' 
    ]; 
} 

Das Modell QuestionTranslation sieht wie folgt aus:

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class QuestionTranslation extends Model 
{ 

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

}

und der Laden Aktion im QuestionsController:

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

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

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

    $question->save(); 

} 

Wenn ich versuche, diese Daten zu speichern, ich der Fehler:

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

Wenn ich json_encode verwende, $ Optionen selbst zu werfen, kann ich es ohne Probleme speichern.

Haben Sie eine Idee, warum das Laravel Casting nicht funktioniert? Vielleicht wegen der übersetzbaren Erweiterung?

+0

ich hier helfen bekam: https://laracasts.com/discuss/channels/laravel/laravel-getting-an -array-to-string-Konvertierung - während-ein-Array-in-ein-json-Datenbank-Feld speichern – JayEJay

Antwort