【问题标题】:Laravel observer not attaching on pivot tableLaravel 观察者未附加在数据透视表上
【发布时间】:2022-02-06 13:13:03
【问题描述】:

我有一个 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() 方法没有触发,我不知道为什么。 createdupdated 的数据透视表中没有记录,它工作正常。 我正在使用 Laravel 5.6

有什么帮助吗?

更新: 根据要求,这是我创建的函数

public function created(Category $category)
{
    \Log::debug('PARENT: '.$category->parent_id);
    if($category->parent_id != null) {
        $this->updateFieldCategories($category);
    }
}

【问题讨论】:

  • 您确定父级已正确分配给新创建的类别吗?另外,您能向我们展示您为观察者创建的函数吗?
  • 我更新了问题,向您展示我的created 函数。是的,我确定父母分配得当。

标签: laravel laravel-5.6


【解决方案1】:

我在一年前问过这个问题。看到这个:Laravel observer for pivot table

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

请参阅my question

【讨论】:

    【解决方案2】:

    只需添加:

    public $afterCommit = true;
    

    在观察者类的开始..它会等到事务完成,然后保存你的附加或分离..

    请查看Laravel's documentation for that

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-04
      • 2020-07-29
      • 2015-08-13
      相关资源
      最近更新 更多