Laravel erzeugt einen Slug vor dem Speichern

7

Ich versuche Laravel 5 mit Hilfe von dieser wunderbaren Website zu lernen . Für mein Aktivitätsmodell möchte ich Schnecken erzeugen, bevor ich eine in meiner Datenbank speichere, also habe ich das folgende Modell erstellt.

%Vor%

Aber wenn ich ein Objekt mit Hilfe des Aktivitätsmodells speichere, wird slug nicht gefüllt, ich habe versucht, es in $ this- & gt; -Attribute ['title']="test" zu ändern, aber es wurde nicht ausgeführt. Ich habe auch versucht, Parameter $ title, $ slug zu setSlugAttribute () hinzuzufügen, aber es hat nicht geholfen.

Was mache ich falsch und könnte jemand den Parameter erklären, der in einigen Beispielen für setSomeAttribute ($ whyParameterHere) verwendet wird.

Hinweis: In meiner Datenbank befindet sich ein Slug-Feld.

Wie von user3158900 vorgeschlagen, habe ich versucht:

%Vor%

Dies macht mein Titelfeld leer, aber speichert den Slug so, wie ich es möchte, warum ist $ this- & gt; Titel dann leer? Wenn ich $ this- & gt; title = $ title entferne; Sowohl Titel als auch Slug sind leer

    
Sven van den Boogaart 01.06.2015, 20:23
quelle

4 Antworten

13

Ich glaube, das funktioniert nicht, weil Sie nicht versuchen, ein Slug-Attribut zu setzen, so dass die Funktion niemals getroffen wird.

Ich würde vorschlagen, $this->attributes['slug'] = ... in Ihrer setTitleAttribute() -Funktion so einzustellen, dass sie immer dann ausgeführt wird, wenn Sie einen Titel festlegen.

Andernfalls wäre eine andere Lösung, ein Ereignis zum Speichern für Ihr Modell zu erstellen, das es dort festlegen würde.

Bearbeiten: Laut Kommentaren ist es auch notwendig, das title-Attribut auch in dieser Funktion zu setzen ...

%Vor%     
user3158900 01.06.2015, 21:33
quelle
4

Eine Möglichkeit, dies zu erreichen, wäre, sich an Modellereignissen zu beteiligen. In diesem Fall möchten wir beim Erstellen einen Block erzeugen.

%Vor%

Sie müssen Ihrer Anwendungsliste von Aliasen (app.php) auch Folgendes hinzufügen:

%Vor%     
Jonathon Dilworth 14.08.2016 22:55
quelle
2

Sie könnten dieses Paket verwenden, das ich Ссылка verwende, oder prüfen, wie es einen Beobachter auf das Speichern des Modells anwendet und wie es funktioniert erzeugt einen einzigartigen Slug und macht dasselbe.

    
Mahmoud Zalt 01.06.2015 21:24
quelle
1

Sie möchten den Slug basierend auf dem Titel festlegen, wenn das Titelattribut festgelegt wird.

%Vor%

Eine andere Alternative wäre, einen ModelObserver zu verwenden und das Speichern Veranstaltung. Dadurch können Sie den Block direkt vor dem Schreiben des Modells in die Datenbank generieren.

%Vor%

In beiden Fällen möchten Sie wahrscheinlich eine Logik hinzufügen, um zu testen, ob der Slug bereits in der DB vorhanden ist, und wenn ja, wird eine steigende Zahl hinzugefügt. zB foo-bar-baz-2 . Der sicherste Platz für diese Logik wäre der ModelObserver, da er unmittelbar vor der Schreibaktion ausgeführt wird.

    
Collin James 01.06.2015 22:14
quelle

Tags und Links