Laravel观察者未附加在数据透视表上

时间:2018-08-11 06:53:43

标签: laravel laravel-5.6

我有一个Category模型,该模型与其自身具有父关系:

public function parent()
{
    return $this->belongsTo('App\Models\Category', 'parent_id', 'id');
}

以及与FieldCategory

的ManyToMany关系
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);
    }
}

1 个答案:

答案 0 :(得分:0)

1年前,我问了这个问题。参见:Laravel observer for pivot table

2个选项。创建自定义BelongsToMany或创建自定义特征BelongsToManySyncEvents

请参阅my question