使用Laravel 5.1,我想软删除category
,question
应自动设置相关模型public function destroy(Category $category)
{
$category->delete();
}
的属性。
This SO Post建议在模型上绑定删除事件:
protected static function boot() {
parent::boot();
static::deleting(function($category) {
$category->questions()->delete();
});
}
则...
static::deleting(function($category) {
$category->questions()->is_published = 'no';
});
这很有效。但我不想删除相关问题,而是在每个问题上设置一个属性:
delete()
这似乎不起作用。没有错误,但我的查询记录器中也没有触发任何查询。为什么 static::deleting(function($category) {
$questions = $category->questions()->get();
foreach($questions as $q) {
$q->is_published = 'no';
$q->save();
}
});
会针对每个相关模型触发,而不是针对属性更改?
我现在开始工作的方式就是这样,但它并不干净:
{{1}}
答案 0 :(得分:1)
你可以做这样的事情
在你的问题模型中
static::deleting(function($category) {
$questions = $category->questions()->get();
foreach($questions as $q) {
$q->is_published = 'no';
$q->save();
}
});
并改变
static::deleting(function($category) {
foreach($category->questions as $q) {
$q->setIsPublished('no')->save();
}
});
到
{{1}}