更新删除相关模型属性
问题描述:
使用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();
}
});
答
你可以做这样的事情
在你的问题的模型
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,这可以在任何语言中转换为否或是 –
属性,你需要保存它。您可以使用问题模型中的本地范围来触发一个查询,以更改具有特定类别的所有问题ID – ClearBoth