Красноречивые мутаторы Laravel не работают с данными обновления

У меня есть в моей модели аксессоры и мутаторы для данных хеширования / повторного хеширования в полях таблицы базы данных. Например:

public function setFullNameAttribute($value)
{
    $this->attributes['full_name'] = Helper::geted('encrypt', $value);
}

public function getFullNameAttribute($value)
{
    return Helper::geted('decrypt', $value);
}

Когда я сохраняю данные в базе данных, все отправляемые данные сохраняются в хешированной форме, но при обновлении данные не хешируются. Мой код сохранения / обновления:

$profile = [
    'full_name' => "John",
    'address' => "United Kingdom"
];

$profile_save = new Profile($profile);
$exist = Personal::where('user_id', Auth::id())->count();
if ($exist == 0) $user->profile()->save($profile_save);
if ($exist == 1) $user->profile()->update($profile);

Когда я первый раз сохраняю эту информацию в db:

Красноречивые мутаторы Laravel не работают с данными обновления

Когда я второй раз вхожу в текущий URL-адрес, данные будут обновлены:

Красноречивые мутаторы Laravel не работают с данными обновления Почему при обновлении информации информация не сохраняется в зашифрованном виде?

опубликуйте свой Helper::geted('decrypt', $value);

Adnan Mumtaz 29.06.2018 09:22

дд ($ профиль); (до обновления) - зашифрованы ли опубликованные данные в этот момент?

Squiggs. 29.06.2018 09:30

Я обновил свой вопрос. Вы можете увидеть подробную информацию на фотографиях.

Andreas Hunter 29.06.2018 09:36
updateOrCreate() выглядит лучшим выбором для вашей ситуации.
Jonas Staudenmeir 29.06.2018 10:01
updateOrCreate() сохраняет повторяющиеся строки на странице обновления или при вводе по текущему URL-адресу тестирования. @JonasStaudenmeir
Andreas Hunter 29.06.2018 10:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
6
5
5 256
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Ваша проблема в этой строке:

$user->profile()->update($profile);

Мутаторы и аксессоры работают с Eloquent, а не с построителями запросов. Вы используете функцию обновления, которая является функцией построителя запросов, поэтому вы напрямую обновляете свою базу данных. Использовать это:

$profile = [
    'full_name' => "John",
    'address' => "United Kingdom"
];
$profile = auth()->user()->profile;
if ($profile) {
    $profile->full_name = $profile['full_name'];
    $profile->address = $profile['address'];
    $profile->save();
} else {
    auth()->user()->profile()->create($profile);
}

Как я могу обновить профиль пользователя без построителей запросов?

Andreas Hunter 29.06.2018 09:46

Для тех, у кого такая же проблема:

Простое опускание круглых скобок тоже помогает, поскольку здесь используется Eloquent вместо Query Builder:

$user->profile->update($profile);

Решение:

$instance->fill($request->all());
$instance->save();

не работает $ instance-> update ($ request-> all ());

Другие вопросы по теме