2016-05-04 18 views
1

Ich frage mich, wie man Laravels Softdelete mit etwas wie MySql Fremdschlüssel verwenden, beschränken Sie Einschränkungen.Laravel Softdelete mit Fremdschlüssel und Beschränkungen beschränken?

Ist bereits etwas in das Framework eingebaut? Softdelete funktioniert bereits, aber ich brauche eine Art Validierung für verwandte Modelle. z.B. eine Fehlermeldung an den Benutzer „Sie können diesen Artikel nicht löschen, da es hat 5 verknüpften Datensätze“

Danke,

Antwort

0

Ja, in Laravel sie haben weiche löschen models.To diese auf dem Modell Illuminate\Database\Eloquent\SoftDeletes Merkmal verwenden und fügen Sie die deleted_at Spalte zu Ihrem $dates Eigentum.

Sie haben auch ihre Abfrage gelöschter Modelle. Sie können jeden auswählen.

Sie können alle Unterlagen darüber erhalten in here.

+0

Softdelete arbeitet bereits. Ignoriert jedoch die mysql-Schlüsseleinschränkungen, da das Element nicht wirklich gelöscht wird. – fabian

+0

"Sie können dieses Element nicht löschen, da es 5 verknüpfte Datensätze gibt". Dazu können Sie dies mit Javascript tun. –

0

Es gibt keine Build-in-Lösung für "unpluging" DB Bezug auf soft löschen.

Was können Sie zum Beispiel tun, ist Beobachter zu verwenden (event listener) oder eloquent model events zum Beispiel verwenden deleting/deleted wie:

public function boot() 
{ 
    User::deleted(function ($user) { 
     if ($user->deleted_at) { 
      // here You have to unplug all the dependencies 
     } 
    }); 
} 
+1

Ich würde vorschlagen, das Ereignis 'deleting' zu verwenden. Obwohl das Modell Soft-Löschvorgänge verwendet, werden die Ereignisse "Löschen"/"Gelöscht" weiterhin verwendet. Darüber hinaus möchten Sounds wie OP möglicherweise das Löschen verhindern, daher wäre das Vorher-Ereignis angemessener. – patricus

+0

Ja, Sie könnten, aber ich denke, dass für Soft-Löschungen sicherer ist, 'save' /' saved' zu verwenden (Sie setzen dieses Datum woanders) –

+1

Werden die 'Speichern' /' gespeicherten' Ereignisse aufgerufen, wenn Sie weich sind einen Datensatz löschen? Wenn man sich den Code anschaut, sieht es so aus, als würde das sanfte Löschen mit einem Update des Abfrage-Generators durchgeführt, was bedeutet, dass die 'Speichern' /' gespeicherten' Ereignisse nicht aufgerufen werden. – patricus

Verwandte Themen