Ich versuche, Daten mit Laravel firstOrNew
Methode zu speichern, die eine MassAssignmentException
Fehler erzeugt.Laravel MassAssignmentException von FirstOrNew von ID
Ich verstehe nicht, warum die firstOrNew
Methode eine Massenzuweisung Ausnahme auslösen sollte, da es nur auf der Datenbank suchen, nicht versucht, etwas zu speichern. Von the docs:
Die firstOrNew Methode, wie firstOrCreate versuchen, einen Datensatz in der Datenbank zu finden, die gegebenen Attribute entsprechen. Wenn jedoch kein Modell gefunden wird, wird eine neue Modellinstanz zurückgegeben. Beachten Sie, dass das von FirstOrNew zurückgegebene Modell noch nicht in der -Datenbank gespeichert wurde.
Warum soll mein Code eine MAE werfen:
$tour = Tour::firstOrNew(array('id' => $this->request['id']));
Wie ich verstehe, alles, was der oben genannte Code zu sagen „ist im Grunde schauen und sehen, ob es eine Zeile in der Datenbank mit diese ID, wenn ja, dann gebe die Zeile zurück, wenn nicht, dann erzeuge ein neues Objekt mit den relevanten Eigenschaften ". Es speichert keine Daten, was ist das Problem?
Beachten Sie, dass der Fehler nur auftritt, wenn die Zeile nicht vorhanden ist.
Sie versuchen, ein Objekt zu erstellen, indem Sie eine ID. In Ihrem Fall ist das vielleicht in Ordnung, aber normalerweise wird ID automatisch erhöht, sodass Sie keinen bestimmten Wert erstellen möchten. Ich würde zuerst ein Objekt nach einem anderen Attribut suchen - wenn der Name existiert, schnappe es, sonst erzeuge ich ein Objekt mit diesem Namen. Du könntest auch darüber nachdenken, in findOrFail nachzusehen, was passender klingt https://laravel.com/docs/5.3/eloquent#retrieving-single-models - existiert ein Objekt mit dieser ID? Wenn ja, bekomme es sonst eine Exception – Djave
Danke, obwohl 'findOrFail' wahrscheinlich nicht geeignet ist, da laut den Docs es automatisch ein 404 schickt, was ich nicht will. ID ist in der Tat automatisch inkrementierend und ist die einzige Spalte, die garantiert eindeutig ist, weshalb ich sie verwenden wollte. Nicht sicher, wie man das dann macht .... – Inigo
Ja ich höre dich. Die Antwort von Alexey Mezenin deckt alle Gründe ab, warum es scheitert. Wenn Sie eine einfache Fahrt wollten, bin ich mir ziemlich sicher '$ tour = Tour :: find ($ this-> request ['id']); if (! $ tour) $ tour = neue Tour; 'wäre ein wirklich schmerzfreier Weg, um an den gleichen Ort zu kommen. Viel Glück! – Djave