我正在尝试根据没有id的电子邮件更新用户,是否有办法在没有原始查询的情况下执行此操作。
目前错误
{“error”:{“type”:“ErrorException”,“message”:“创建默认对象 从空 值”, “文件”: “C:\瓦帕\ WWW \名人-吉姆\应用\控制器\ SignupController.php”, “行”:189}}
我的代码
public function changeAccountStatus ($plan, $userEmail ){ $UpdateDetails = User::where('email', '=', $userEmail)->first(); $UpdateDetails->member_type = $plan; $UpdateDetails->save(); }
答案 0 :(得分:11)
您可以使用Laravel query builder,但这不是最好的方法。
检查Wader's answer below的Eloquent方式 - 这样做更好,因为它可以让您检查实际上是否有与该电子邮件地址匹配的用户,并在没有&#t时执行错误。
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.
如果要更新多个字段,最后可以在该数组中添加更多值。
答案 1 :(得分:7)
此错误表示User::where('email', '=', $userEmail)->first()
返回null,而不是更新模型时出现问题。
在尝试更改用户的属性或使用firstOrFail()
方法之前,请检查您是否确实拥有用户。
$UpdateDetails = User::where('email', $userEmail)->first();
if (is_null($UpdateDetails)) {
return false;
}
或使用firstOrFail()
方法,不需要检查用户是否为null,因为当找不到模型时会引发异常(ModelNotFoundException
),您可以使用{{1 }} http://laravel.com/docs/4.2/errors#handling-errors
App::error()
答案 2 :(得分:1)
尝试这样做。
User::where('email', $userEmail)->update({'member_type' => $plan});
答案 3 :(得分:1)
$update = \DB::table('student') ->where('id', $data['id']) ->limit(1) ->update( [ 'name' => $data['name'], 'address' => $data['address'], 'email' => $data['email'], 'contactno' => $data['contactno'] ]);
答案 4 :(得分:1)
这很简单。代码如下:
DB::table('user')->where('email', $userEmail)->update(array('member_type' => $plan));