Запрос обновления Laravel
Я пытаюсь обновить пользователя на основе электронной почты, но не там, есть ли способ сделать это без необработанных запросов.
В настоящее время ошибка
{ "error": { "type": "ErrorException", "message": "Создание объекта по умолчанию из пустых Значение", "файл": "C:\WAMP\WWW\Celeb-джим\App\Контроллеры\SignupController.php", "линия": 189}}
Мой код
public function changeAccountStatus ($plan, $userEmail ){
$UpdateDetails = User::where('email', '=', $userEmail)->first();
$UpdateDetails->member_type = $plan;
$UpdateDetails->save();
}
Ответы
Ответ 1
Эта ошибка предполагает, что User::where('email', '=', $userEmail)->first()
возвращает значение null, а не проблему с обновлением вашей модели.
Убедитесь, что у вас фактически есть Пользователь, прежде чем пытаться изменить его свойства или использовать метод firstOrFail()
.
$UpdateDetails = User::where('email', $userEmail)->first();
if (is_null($UpdateDetails)) {
return false;
}
или используя метод firstOrFail()
, нет необходимости проверять, является ли пользователь пустым, потому что это генерирует исключение (ModelNotFoundException
), когда модель не найдена, которую вы можете поймать с помощью App::error()
http://laravel.com/docs/4.2/errors#handling-errors
$UpdateDetails = User::where('email', $userEmail)->firstOrFail();
Ответ 2
Вы можете использовать конструктор запросов Laravel, но это не лучший способ сделать это.
Проверьте ответ Wader ниже для Eloquent - это лучше, поскольку он позволяет вам проверить, что на самом деле есть пользователь, который совпадает с адресом электронной почты, и обработать ошибку, если ее нет.
DB::table('users')
->where('email', $userEmail) // find your user by their email
->limit(1) // optional - to ensure only one record is updated.
->update(array('member_type' => $plan)); // update the record in the DB.
Если у вас есть несколько полей для обновления, вы можете просто добавить больше значений в этот массив в конце.
Ответ 3
Попробуйте сделать это так.
User::where('email', $userEmail)
->update([
'member_type' => $plan
]);
Ответ 4
$update = \DB::table('student') ->where('id', $data['id']) ->limit(1) ->update( [ 'name' => $data['name'], 'address' => $data['address'], 'email' => $data['email'], 'contactno' => $data['contactno'] ]);
Ответ 5
Это очень просто сделать. Код указан ниже:
DB::table('user')->where('email', $userEmail)->update(array('member_type' => $plan));