1

我正在构建一个模型并使用 chelout/laravel-relationship-events 来捕获事件。

我有一个看起来像这样的模型:

    class Taxonomyterm extends Model
    {
    use HasMorphToManyEvents, HasMorphedByManyEvents {
        HasMorphedByManyEvents::newMorphToMany insteadof HasMorphToManyEvents;
    }
    ...
    public function images()
    {
        return $this->morphToMany(Image::class, 'imageable')->withTimestamps();
    }

    public function items()
    {
        return $this->morphedByMany(Item::class, 'taxonomytermable')->orderBy('taxonomytermables.id')->withPivot('id')->withTimestamps();
    }
    ...    
    protected static function boot()
    {
        parent::boot();
        static::morphToManyAttached(function ($relation, $parent, $ids, $attributes) {
            if( $relation == 'images') {
                dd('Attached MorphToMany');
            }
        }

        static::morphedByManyAttached(function ($relation, $parent, $ids, $attributes) {
            if( $relation == 'items') {
                dd('Attached MorphedByMany');
            }
        }
    }

包的维护者向我指出了 PHP文档,但似乎找不到正确的方法来完成这项工作。

我还假设 newMorphToMany 是两个特征之间发生冲突的方法。

我基本上不知道从这里做什么才能让 HasMorphToManyEvents 和 HasMorphedByManyEvents 在同一个模型上工作。 这是来自的包裹

4

1 回答 1

0

您需要确定这两个特征之间的冲突方法。假设这newMorphToMany是冲突的方法:

如果您需要它们都可用,则需要将其中之一重命名如下。

class Taxonomyterm extends Model
{
    use HasMorphToManyEvents, HasMorphedByManyEvents {
        HasMorphedByManyEvents::newMorphToMany insteadof HasMorphToManyEvents;
        HasMorphToManyEvents::newMorphToMany as newMorphToMany2;
    }
    // ... more code
}

现在,无论您需要在什么地方HasMorphToManyEvents::newMorphToMany使用Taxonomyterm class它,都可以使用它的新名称newMorphToMany2. 否则,newMorphToMany将始终HasMorphedByManyEvents::newMorphToMany在此类中引用。只是强调一下,您需要找出并确定这两个特征中的冲突方法。我希望这会引导您找到解决方案...

于 2020-08-31T07:35:56.693 回答