Как прослушать изменения в сводной таблице Eloquent MorphToMany - PullRequest
0 голосов
/ 23 марта 2020

У меня есть 3 модели (Оператор1, Оператор2, Оператор3), которые все имеют отношение MorphToMany к PaymentMethods. Таблица отношений / сводок содержит некоторую дополнительную информацию, определяющую c для одного оператора. Вот пример модели:

class Operator1 extends Model
{
    /**
     * The payment methods of the operator.
     */
    public function paymentMethods()
    {
        return $this->morphToMany('App\PaymentMethod', 'payable')->withPivot([
            'deposit_time',
            'withdrawal_time',
            'deposit_fees',
            'withdrawal_fees',
        ]);
    }
}

Мне нужно прослушать изменения в сводной таблице. При работе с отношениями BelongsToMany я могу использовать метод ->using(aPivotModelClass::class), чтобы указать модель пользовательского класса сводок, где я затем могу прослушивать saving, saved, deleted, deleting и др. c , красноречивые события.

Я использую пакет eventually от altek , чтобы не делать это для каждого центра, но так как я использую Laravel Nova , который не не запускать события, предоставляемые этим пакетом, мне нужно запускать их вручную. Я делаю это так:

use Illuminate\Database\Eloquent\Relations\Pivot as EloquentPivot;

abstract class Pivot extends EloquentPivot
{
    /**
     * @var string
     */
    public $relationName;

    /**
     * {@inheritDoc}
     */
    public static function boot()
    {
        parent::boot();

        static::saved(function (Pivot $model) {
            $model->pivotParent->firePivotEvent('attached', true, $model->relationName, [$model->attributes]);
        });

        static::deleted(function (Pivot $model) {
            $model->pivotParent->firePivotEvent('detached', true, $model->relationName, [$model->attributes]);
        });
    }
}

Пока все это работает в сочетании с BelongsToMany, но сейчас я пытаюсь использовать метод ->using(SomePivotModel::class) в отношении MorphToMany. Это не работает, и я получаю следующую ошибку:

local.ERROR: Call to undefined method App\Pivots\Payables::setMorphType() {"userId":1,"exception":"[object] (BadMethodCallException(code: 0): Call to undefined method App\\Pivots\\Payables::setMorphType() at /var/www/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php:50)

Как я могу прослушивать обновления сводных таблиц MorphToMany, без каких-либо возможных или похожих пакетов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...