Laravel更新查询

时间:2014-12-02 11:51:57

标签: php laravel

我正在尝试根据没有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();
    }

5 个答案:

答案 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));