更新删除相关模型属性

问题描述:

使用Laravel 5.1,我想软删除一个category,它应该自动设置相关模型的属性question更新删除相关模型属性

This SO Post建议对模型绑定删除事件:

public function destroy(Category $category) 
{ 
    $category->delete(); 
} 

则...

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(); 
     } 
    }); 
+0

属性,你需要保存它。您可以使用问题模型中的本地范围来触发一个查询,以更改具有特定类别的所有问题ID – ClearBoth

你可以做这样的事情

在你的问题的模型

public function setIsPublished($isPublished) { 
    $this->is_published = $isPublished; 
    return $this; 
} 

而且变更

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(); 
    } 
}); 
如果你想设置
+0

我personnaly更喜欢使用0或1,这可以在任何语言中转换为否或是 –