2017-09-25 1 views
0

Jedes Mal, wenn ich laufe einen Code wie dies geschiehtWarum funktioniert das Speichern nur zum Erstellen und nicht zum Aktualisieren?

$foo = Foo::find(1); 
echo $foo->bar; // echoes 400 
$foo->bar = 300; 
echo $foo->bar; // echoes 300 
$foo->save(); 
echo $foo->bar; // echoes 300 
$foo = Foo::find(1); 
echo $foo->bar; // echoes 400 - it didn't save! no changes to the table 

Nichts. Aber das funktioniert:

$foo = new Foo; 
$foo->bar = 200; 
echo $foo->bar; // echoes 200; 
$foo->save(); // a new entry is added to my table 

ich nicht aktualisieren kann (Änderungen am Modell vorgenommen werden, aber es speichert nicht), aber das Hinzufügen neuer Einträge funktioniert. Warum?

(Foo Modell-Klasse erweitert, eine Bar ist eine Spalte)

+0

Sind Sie sicher, dass Ihr Objekt eine ID-Schlüssel haben? Sonst weiß Laravel nicht, welche Zeile aktualisiert wird. –

+0

Welche Version von Laravel verwenden Sie? Welche Datenbank verwendest du? Können Sie den Inhalt Ihres Modells auch posten? –

+0

Das einzige Szenario, das ich denken kann, wo 'save()' gewohnt * speichern *, wenn Sie die 'bar' von Massen assignement schützen! – teeyo

Antwort

0

Ich hatte 'Id' als Header für IDs. Wenn man es in "id" änderte, funktionierte alles.

0

alle Modelle verfügen über 2 Eigenschaft $ original und $ Attribute. Model wenn Sie finden verwenden, Modell sync Ergebnis zum ursprünglichen. Method

und Sie legen neue Daten fest, aktualisieren Sie nur $ attributes ['bar'], $ original ['bar'] same auf Datenbankwert.

wenn Sie save() Methode verwenden, Update-Datenbank und original wieder $ synchronisieren $ Attribute. nach update() -Methode Modell nicht brauchen neue Auswahlabfrage erstellen, aktualisieren $ original

Verwandte Themen