Laravel пользовательский пивот с возрастающей ошибкой ключевого наблюдателя - PullRequest
1 голос
/ 02 апреля 2020

У меня есть пользовательская модель разворота с инкрементным идентификатором. Я настроил Обозреватель, и я получаю события для таких вещей, как attach, updateExistingPivot, et c. Однако объект, который передается в функции наблюдателя, не включает поле «id». Это выдает ошибку, когда я пытаюсь сохранить связанную модель в пользовательский сводный график (см. Модель аудита ниже).

class Audit extends Model
{
    public function auditable()
    {
        return $this->morphTo();
    }
}

class User extends Model
{
  public function accounts()
  {
    return $this->belongsToMany('App\Models\Account')
    ->withPivot('id')
    ->using('App\Models\AccountUser');
  }
}

class Account extends Model
{
  public function users()
  {
    return $this->belongsToMany('App\Models\User')
    ->withPivot('id')
    ->using('App\Models\AccountUser');
  }
}

class AccountUser extends Pivot
{
  public $incrementing = true;

  public function account()
  {
    return $this->belongsTo('App\Models\Account');
  }

  public function user()
  {
    return $this->belongsTo('App\Models\User');
  }

  public function audits()
  {
    return $this->morphMany('App\Models\Audit', 'auditable');
  }
}

Если я выполняю $user->accounts()->updateExistingPivot($acct_id, ['description' => $description]);, происходит событие обновления, но оно не содержится в id:

(
    [user_id] => 18000
    [account_id] => 111389
    [description] => My Description
)

Затем, если я пытаюсь сохранить новый Audit в пользовательский сводный блок, я получаю сообщение об ошибке, поскольку для оператора SQL нет auditable_id:

public function updating(AccountUser $auditable)
{
  $audit = new Audit();
  ...
  $auditable->audits()->save($audit);
}

Генерирует

Integrity constraint violation: 1048 Column 'auditable_id' cannot be null (SQL: insert into `audits` (`auditable_id`, `auditable_type`, `updated_at`, `created_at`) values (?, App\\Models\\AccountUser, 2020-04-02 13:24:53, 2020-04-02 13:24:53)) 

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 06 апреля 2020

Оказывается, это было исправлено в ветви Laravel 7.x, в то время как я все еще на 6.xie в 7.x, события настраиваемой сводки будут иметь поле id (и все остальные), если оно существует .

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