Ich bin sehr grün bei Laravel (erstes Projekt), also ertragen Sie mit mir, wenn ich Anfängerfehler mache. Ich versuche dieses Projekt zu erstellen, während ich durch Laracasts laufe, also benutze ich seine Vorschläge. Ich benutze Laravel 5.4 und PHP 7.1.4Laravel 5 wie man Mutator vor der Validierung laufen lässt
Ich habe ein Kontrollkästchen in einem Formular für ein boolesches Feld. Wenn das Kontrollkästchen beim Übergeben des Formulars nicht aktiviert ist, wird null zurückgegeben. Ich möchte keine Null-Werte für Boolesche Werte haben, deshalb habe ich einen Validator, der sicherstellt, dass er nur Wahr/Falsch-Werte akzeptiert. Damit dies funktioniert, musste ich einen Mutator erstellen, um den Wert in false zu ändern, wenn er null war.
Ich habe zwei Modelle, Item und ItemNote. Ich versuche, ItemNote aus dem Item-Modell zu erstellen. Auf der Item-Seite gibt es einen Platz zum Hinzufügen der ItemNote, die durch den ItemNoteController läuft. Ich rufe dann eine Methode in Item auf, um ItemNote hinzuzufügen. Das Problem ist, dass der Mutator nicht im ItemNote-Modell ausgeführt werden kann, sodass die Validierung fehlschlägt, weil das boolesche Feld (calendar_item) null ist.
Ich habe zuerst versucht, ItemNote aus der Beziehung mit Item zu erstellen, entsprechend diesem Stapelüberlauf Laravel 5 mutators only work when I create a record and not when I update a record Antwort der Mutator wird nicht ausgeführt, wenn über eine Beziehung $ this-> notes() -> create ($ request-> alle()). Sie müssen das Modell verwenden $ this-> notes-> create ($ request-> all()) Beachten Sie das Fehlen von Klammern nach Noten. Also habe ich alles versucht, was ich mir vorstellen kann, um zu versuchen, das Objekt über das Modell zu erstellen, und ich kann den Mutator immer noch nicht zum Laufen bringen.
Hier sind die Beziehung Erklärungen in meiner Modelle:
Artikel
public function notes() { return $this->hasMany(ItemNote::class); }
ItemNote
public function item() { return $this->belongsTo(Item::class); }
Mutator in ItemNote für calendar_item
protected function setCalendarItemAttribute($value) { $this->attributes['calendar_item'] = isset($value) ? $value : FALSE; }
Die v alidierung Regeln in ItemNote
public static $validationRules = array('note_date' => 'required|date',
'resolve_date' => 'nullable|date',
'notes' => 'required|string',
'cost' => 'nullable|numeric',
'calendar_item' => 'required|boolean',
'attachment_path' => 'nullable|string|max:200');
Dies ist die Aktion in ItemNoteController, der ausgeführt wird, wenn eine ItemNote von der Artikelseite hinzufügen
public function store(Item $item)
{
$this->validate(request(), ItemNote::$validationRules);
$item->addNote(new ItemNote(request(['item_note_category_id', 'note_date', 'resolve_date',
'notes', 'cost', 'calendar_item', 'attachment_path'])));
return back();
}
Hier wird die Funktion addNote im Item-Modell
public function addNote(ItemNote $note)
{
$this->item_note->save($note);
}
Hier sind die verschiedenen Dinge, die ich in AddNote versucht habe, sie alle nicht den Mutator ausführen. Die create-Anweisungen haben die Feldzuweisungen aufgelistet, aber ich habe sie hier der Kürze halber entfernt.
$this->notes->save($note);
$this->notes()->save($note);
$this->item_note->save($note);
$this->notes->create
$this->item_notes->create
$this->item_notes()->create
$this->item_note->create
$this->item_note()->create
$this->ItemNote->create
$this->ItemNote()->create
ItemNote::create
Alle der oben genannten Arbeit, obwohl ich $ this- denken würde> item_notes-> schaffen sollte überhaupt nicht funktionieren, weil die Beziehung Name Notizen, aber es beschwert sich nicht, was es mir denken lässt, kann nicht zu diesem Code und es ist auf die Validierung im Controller fehlgeschlagen. Wie bekomme ich die Mutatoren vor der Validierung? Oder gibt es eine bessere Möglichkeit, die Daten vor der Validierung zu bereinigen?
Ich habe auch versucht, das Feld item_id in die Validierungsregeln zu setzen, aber das schlägt immer fehl, weil die item_id erst zugewiesen wird, wenn ich das Objekt über die Beziehung erstellt habe. Ich möchte es verlangen, habe aber nicht herausgefunden, wie es in der Anfrage zugewiesen wird.
Jede Hilfe wird geschätzt. Entschuldigung für die lange Post.
Sie wissen nicht, what't falsch, aber diese Syntax korrekt ist: $ this-> Notizen() -> speichern ($ Hinweis); –
Was ist das Ergebnis von dd ($ item-> addNote (new ItemNote (request (...)))); –
Ich habe dd ($ item-> addNote (neu ItemNote (Anfrage ([ 'item_note_category_id', 'note_date', 'resolve_date', 'merkt', 'Kosten', 'calendar_item', 'attachment_path'])))) ; vor der validate-Anweisung und ich habe FatalThrowableError Aufruf an Member-Funktion save() auf Null. Vielleicht sollte ich es nach der Validierung woanders hinstellen? – PhishTail