2014-12-02 3 views
8

Я пытаюсь обновить пользователя на основе электронной почты, но не там, есть ли способ сделать это без необработанных запросов.Laravel Update Query

В настоящее время ошибка

{ "Ошибка": { "Тип": "ErrorException", "сообщение": "Создание объекта по умолчанию из пустого значения", "файл": "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(); 
    } 
+0

И что в строке '189'? –

ответ

5

Эта ошибка предполагает, что 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(); 
4

Вы можете использовать Laravel query builder, но это не самый лучший способ сделать это.

Проверьте Wader's answer below на «Красноречивый путь» - это лучше, так как позволяет проверить, что на самом деле есть пользователь, который соответствует адресу электронной почты, и обрабатывать ошибку, если этого не происходит.

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. 

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

+0

Я думаю, вы не поняли вопроса. Он хочет предоставить электронную почту в методе Eloquent find() и хочет, чтобы он соответствовал столбцу emil –

+0

Я отредактировал свой комментарий –

+0

Зачем использовать Query Builder для этого, когда у op есть настройка модели Eloquent? Проблема заключается не в том, что это нелегко сделать в Eloquent, но факт отсутствия проверки нуля перед попыткой установить свойства объекта (см. Мой ответ) – Wader

0

Попробуйте сделать это вот так.

User::where('email', $userEmail)->update({'member_type' => $plan});