2016-11-21 6 views
0

Ich habe eine Spalte, die eine Daten im JSON-Format in MySQL-Tabelle in Form vonConvert JSON Array in MySQL Spalte Laravel

a:3:{s:2:"12";s:0:"";s:2:"34";s:0:"";s:2:"56";s:10:"1234567890";} 

Aber da $cast wurde eingeführt in Laravel 5, war ich der Planung umformatieren speichert meine Daten und Code mit Array Gießen zu verwenden.

hat keine direkte Umwandlung Tipps zu finden, diese so versucht:

  1. eine Spalte mit denselben Attributen Erstellt (colB) wie in der ursprünglichen Spalte (colA).
  2. Eingefügt in meinem Modell protected $casts = ['colA' => 'json', 'colB' => 'array'];
  3. diesen Code Ausgeführt:

foreach(Model::all() as $item){ 
    $item->colB = $item->colA; 
    $item->save(); 
} 

-Code ausgeführt w/o Fehler, aber nichts geschah. colB war leer. als ich aber vielleicht nicht Laravel nicht meine JSON Formatierung mag, so dass ich den Code dies zu ändern:

foreach(Model::all() as $item){ 
    $item->colB = unserialize($item->colA); 
    $item->save(); 
} 

Und protected $casts = ['colB' => 'array'];

Aber ich habe unserialize() expects parameter 1 to be string Fehler, obwohl auch wenn ich dd($item->colA) ich ein perfektes bekommen Zeichenfolge. Und, was ist toll, wenn ich dd(unserialize($item->colA)) bekomme ich eine perfekte Anordnung.

Ich vielleicht meine Daten verursacht dies, und versuchte, dass mit einer Tabelle, die eine einzige Reihe hatte ohne Erfolg.

Alle Tipps geschätzt!

Antwort

0

Wenn Sie $fillable und $guarded verwenden, vergewissern Sie sich, dass colB zu $fillable hinzugefügt wurde, damit Sie es aktualisieren können.

z.

protected $fillable = [ 'colA', 'colB' ]; 

könnte der Grund sein, warum Ihr erstes Skript nichts in der Datenbank geändert haben ...

Die andere Option ist alles in Ihrem Modell unguard ...

protected $guarded = []; 
+0

Wenn Wenn Sie sich meinen Code ansehen, werden Sie feststellen, dass ich meine Zeilen nicht in großen Mengen aktualisiere, sodass $ fillable keine Auswirkungen hat. –

+0

'$ fillable' hat nichts mit Massenbearbeitung zu tun. Es dient dem Schutz von Modellen vor Massenzuweisungen. Versuchen Sie es zumindest, bevor Sie es vollständig ausschließen. Ich sehe niemanden, der Lösungen anbietet ... –

+0

Genau das, was ich gesagt habe: Masse und Masse sind Synonyme. Ich glaube, Sie wissen nicht einmal, welche Massenaufgabe in Laravel ist, das ist das erste, was Sie im Rahmen lernen. Man muss sich über seine Absichten oder sein Fachwissen wundern ... –