Как я могу избежать обновления пароля в Laravel, если поле ввода пароля оставлено пустым? - PullRequest
3 голосов
/ 21 февраля 2020

Я получил этот код в laravel, который позволяет администратору обновлять пароль пользователя:

public function editarmembro(Request $dados)    {

        $validatedData = $dados->validate([

            'name' => 'required',
            'email' => 'required',
            'credencial' => 'required',

        ]);

        $dados = $dados->all();

        if (!empty($dados['password'])) {
            $dados['password'] = Hash::make($dados['password']);
        }

        DB::table('users')->where('id', $dados['id'])->update(
            [ 'name' => $dados['name'], 'email' => $dados['email'], 'credencial' => $dados['credencial'], 'password' => $dados['password'], 'sobre' => $dados['sobre'], 'updated_at' => Carbon::now(),  ]
        );

        return redirect()->route('membros')->with('mensagemSucesso',  'As informações do membro "'.$dados['name'].'" foram atualizadas com sucesso.');

    }

Моя проблема в том, что если он оставил поле пароля пустым, я получаю сообщение об ошибке, в котором говорится, что поле пароля не может быть NULL. Я хочу, чтобы мой код НЕ обновлял пароль, если он оставил поле пароля пустым, но НЕ обновляю, если он вставляет что-то в поле пароля.

Справка, пожалуйста.

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Вам просто нужно объединить массив со всеми значениями (кроме пароля) пароля, только если он существует / установлен:

    $your_array = [ 
        'name' => $dados['name'], 
        'email' => $dados['email'], 
        'credencial' => $dados['credencial'], 
        'sobre' => $dados['sobre'], 
        'updated_at' => Carbon::now(),  
    ];
    DB::table('users')->where('id', $dados['id'])->update(
        empty($dados['password']) ? $your_array : array_merge($your_array, ['password' => $dados['password']])
    );
1 голос
/ 21 февраля 2020

Вы можете удалить его из массива $dados, если он пуст:

if (!empty($dados['password'])) 
    $dados['password'] = Hash::make($dados['password']);
else 
    unset($dados['password']);

или с троичным оператором

!empty($dados['password'])? $dados['password'] = Hash::make($dados['password']): unset($dados['password']);

, и так как все имена полей совпадают с именами полей запрос и поле updated_at должны заполняться автоматически, вам не нужно повторно собирать массив для обновления.

DB::table('users')->where('id', $dados['id'])->update($dados);

Если вы все равно хотите собрать массив, вы можете сделать так

$update_dados = [ 
        'name' => $dados['name'], 
        'email' => $dados['email'], 
        'credencial' => $dados['credencial'], 
        'sobre' => $dados['sobre'], 
        'updated_at' => Carbon::now(),  
];

if (!empty($dados['password'])) 
    $update_dados['password'] = Hash::make($dados['password']);

DB::table('users')->where('id', $dados['id'])->update($update_dados);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...