Mit Laravel 5.1 möchte ich ein category
weich löschen, das Attribute automatisch auf seinen verwandten Modellen, question
, setzen sollte.Aktualisieren verwandter Modellattribute beim Löschen
This SO Post empfiehlt auf dem Modell löschen Ereignisbindung:
public function destroy(Category $category)
{
$category->delete();
}
Then ...
protected static function boot() {
parent::boot();
static::deleting(function($category) {
$category->questions()->delete();
});
}
Dies funktioniert. Aber ich möchte nicht die zugehörigen Fragen löschen, sondern ein Attribut für jeden einzelnen setzen:
Dies scheint nicht zu funktionieren. Es gibt keinen Fehler, aber auch keine Abfragen werden in meinem Abfrageprotokollierer ausgelöst. Warum wird delete()
auf jedes verwandte Modell ausgelöst, aber nicht auf Attributänderungen?
So wie ich das jetzt als solche zu arbeiten, aber es ist nicht sauber:
static::deleting(function($category) {
$questions = $category->questions()->get();
foreach($questions as $q) {
$q->is_published = 'no';
$q->save();
}
});
wenn Sie festlegen möchten Attribut Sie sie speichern müssen. Sie können den lokalen Bereich im Fragemodell verwenden, um eine Abfrage auszulösen, die alle Fragen mit einer bestimmten Kategorie-ID ändert. – ClearBoth