Запрос обновления 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));