#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; } }