Красноречивые мутаторы Laravel не работают над обновлением данных - PullRequest
0 голосов
/ 29 июня 2018

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

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);

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

enter image description here

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

enter image description here Почему при обновлении информации информация не хранится в зашифрованном виде?

1 Ответ

0 голосов
/ 29 июня 2018

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

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

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

$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);
}
...