У меня есть в моей модели аксессоры и мутаторы для данных хеширования / повторного хеширования в полях таблицы базы данных. Например:
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:
Когда я второй раз вхожу в текущий URL-адрес, данные будут обновлены:
Почему при обновлении информации информация не сохраняется в зашифрованном виде?
дд ($ профиль); (до обновления) - зашифрованы ли опубликованные данные в этот момент?
Я обновил свой вопрос. Вы можете увидеть подробную информацию на фотографиях.
updateOrCreate() выглядит лучшим выбором для вашей ситуации.
updateOrCreate() сохраняет повторяющиеся строки на странице обновления или при вводе по текущему URL-адресу тестирования. @JonasStaudenmeir






Ваша проблема в этой строке:
$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);
}
Как я могу обновить профиль пользователя без построителей запросов?
Для тех, у кого такая же проблема:
Простое опускание круглых скобок тоже помогает, поскольку здесь используется Eloquent вместо Query Builder:
$user->profile->update($profile);
Решение:
$instance->fill($request->all());
$instance->save();
не работает $ instance-> update ($ request-> all ());
опубликуйте свой
Helper::geted('decrypt', $value);