Laravel 8 — вручную запустите все мутаторы и средства доступа в массиве в классе модели

#laravel #eloquent

#ларавель #красноречивый

Вопрос:

Я новичок в Laravel и хотел бы, чтобы в моих моделях работал метод под названием getDiff.

Задача состоит в том, чтобы сравнить массив пар значений ключей с существующими атрибутами в модели и вывести то, что отличается.

Смотрите строку: $compare = $this-gt;Запускаемые модули($comapre);gt;

Я просмотрел класс модели и попытался отследить, как он это делает, попробовал несколько вызовов — но это лабиринт черт и реализаций.

Каково решение или лучшая практика здесь?

 class Client extends Model {  use HasFactory;    protected $table = 'clients';  protected $guarded = ['id'];    protected $excludeCompareKeys = [  'ID',   'created_at',   'updated_at',   'created_by_user'  ];    /*  * HOME PHONE  */  public function setHomePhoneAttribute(string $value) {  $this-gt;attributes['home_phone'] = Formatter::extractNumbers($value);  }    public function getHomePhoneAttribute(string $value): string {  return Formatter::USPhoneNumber($value);   }        /*  * MOBILE PHONE  */  public function setMobilePhoneAttribute(string $value) {   $this-gt;attributes['mobile_phone'] = Formatter::extractNumbers($value);  }    public function getMobilePhoneAttribute(string $value): string {  return Formatter::USPhoneNumber($value);  }        /*  * DATE OF BIRTH  */  public function setDobAttribute($value) {   $this-gt;attributes['dob'] = Formatter::toMYSQLDate($value);  }    public function getDobAttribute(string $value): string {  return Formatter::fromMYSQLDatetime($value, 'm/d/Y');  }      /*  * Return changed values  */  public function getDiff(array $compare): array {    // I need to simulate all mutators being called here.  **$compare = $this-gt;runMutators($comapre);**    $diff = array_diff_assoc($compare, $this-gt;attributes);    foreach($this-gt;excludeCompareKeys as $k)   unset($diff[$k]);     return $diff;  } }