Разоблачение оригинального имени: определение истинной идентичности модели Laravel без мутаций

В разработке на Laravel работа с моделями — обычная задача. Однако в некоторых сценариях вам может потребоваться получить исходное имя модели без каких-либо изменений. В этой статье рассматриваются различные методы достижения этой цели, используя разговорный язык и приводятся примеры кода.

Метод 1: использование метода getOriginal
Laravel предоставляет полезный метод под названием getOriginal, который позволяет вам получить исходные атрибуты модели без каких-либо изменений, внесенных системой мутаций Laravel. Вот пример:

$user = User::find(1);
$originalName = $user->getOriginal('name');

Метод 2: доступ к базовой записи базы данных
Другой подход заключается в прямом доступе к базовой записи базы данных, связанной с моделью. Этот метод полностью обходит систему мутаций Laravel. Вот пример:

$user = User::find(1);
$originalName = $user->getRawOriginal('name');

Метод 3: запрос к базе данных
Если описанные выше методы не соответствуют вашим потребностям, вы можете выполнить необработанный запрос к базе данных, используя построитель запросов Laravel или необработанный SQL. Этот подход позволяет получить исходное имя непосредственно из таблицы базы данных:

$originalName = DB::table('users')->where('id', 1)->value('name');

Метод 4: реализация пользовательских методов доступа
Если у вас есть контроль над кодом модели, вы можете определить пользовательский метод доступа, который возвращает исходное имя. Переопределив метод getAttribute, вы можете обойти мутации. Вот пример:

class User extends Model
{
    public function getAttribute($key)
    {
        if ($key === 'name') {
            return $this->getOriginal('name');
        }
        return parent::getAttribute($key);
    }
}
// Usage:
$user = User::find(1);
$originalName = $user->name;

В этой статье мы рассмотрели несколько методов получения исходного имени модели Laravel без каких-либо изменений. Эти методы варьируются от использования встроенных функций Laravel, таких как getOriginalи getRawOriginal, до прямых запросов к базе данных. Дополнительно мы обсудили вариант реализации пользовательских аксессоров для достижения желаемого результата. Используя эти методы, вы можете легко получить доступ к неизмененным атрибутам модели Laravel.