我有一个Category
模型,该模型与其自身具有父关系:
public function parent()
{
return $this->belongsTo('App\Models\Category', 'parent_id', 'id');
}
以及与FieldCategory
public function fieldcategories()
{
return $this->belongsToMany('App\Models\FieldCategory');
}
我有一个CategoryObserver
来观察父级是否有任何更改(例如,如果某个类别已移至子类别),如果有变化,我想将父级FielCategory
条目附加到子类别
public function updated(Category $category)
{
if($category->parent_id != null) {
$this->updateFieldCategories($category);
}
}
public function updateFieldCategories(Category $category)
{
$category->fieldcategories()->detach();
$parent = \App\Models\Category::find($category->parent->id);
$parentFieldCategoriesArray = [];
foreach ($parent->fieldcategories as $parentCat)
{
$parentFieldCategoriesArray[] = $parentCat->id;
}
$category->fieldcategories()->attach($parentFieldCategoriesArray);
}
它在updated
上正常工作!但是,当我尝试在created
上做确切的事情时(选择了父项时),它失败了,我不知道为什么?
我已经尝试调试此功能,并且$parentFieldCategoriesArray
充满了必要的ID。看来$category->fieldcategories()->attach()
方法没有触发,我也不知道为什么。
created
上的数据透视表中没有记录,updated
上的数据透视表工作正常。
我正在使用Laravel 5.6
请帮忙吗?
更新: 根据要求,这是我创建的函数
public function created(Category $category)
{
\Log::debug('PARENT: '.$category->parent_id);
if($category->parent_id != null) {
$this->updateFieldCategories($category);
}
}
答案 0 :(得分:0)
1年前,我问了这个问题。参见:Laravel observer for pivot table。
2个选项。创建自定义BelongsToMany
或创建自定义特征BelongsToManySyncEvents
。
请参阅my question。