Как вы обновляете метки времени в отношениях «многие ко многим»? - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть две модели Job и User.

Пользователям может быть назначено много заданий, и задания могут иметь много назначенных лиц.

class Job extends Model {

  public function assignees()
  {
    return $this->belongsToMany('App\Models\User')->withTimestamps();
  }

}


class User extends Model {

  public function jobs()
  {
      return $this->belongsToMany('App\Models\Job')->withTimestamps();
  }

}

В моем контроллере заданий я обновлять получателей следующим образом:

$job = Job::find(1);

$job->assignees()->sync([1,2]);

$job->save();

Все работает, как и ожидалось, за исключением того, что отметка времени задания не обновляется.

Поле updated_at остается неизменным.

Кто-нибудь может увидеть, где может быть моя проблема?

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Вы можете использовать $job->touch(); после $job->assignees()->sync([1,2]); строки следующим образом:

$job = Job::find(1);
$job->assignees()->sync([1,2]);
$job->touch();
$job->save();

И это обновит временные метки для вас.

1 голос
/ 09 апреля 2020

Ссылаясь на документы, это должно сделать работу: https://laravel.com/docs/7.x/eloquent-relationships#touching -parent-timestamps

В ваших моделях должен быть новый атрибут массива $touches, который получает новый элемент с имя отношения.

class Job extends Model {

  //if you also want to update a user model from the jobs site
  protected $touches = ['assignees'];

  public function assignees()
  {
    return $this->belongsToMany('App\Models\User')->withTimestamps();
  }

}


class User extends Model {

  protected $touches = ['jobs'];

  public function jobs()
  {
      return $this->belongsToMany('App\Models\Job')->withTimestamps();
  }

}

Кстати: Метод withTimestamps() обновляет только метки времени вашей промежуточной таблицы.

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