在删除时更新相关的模型属性

时间:2016-08-03 21:24:01

标签: php laravel laravel-5.1

使用Laravel 5.1,我想软删除categoryquestion应自动设置相关模型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}}

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}}