如何更新Laravel 4中字段的列?

时间:2013-10-26 15:45:49

标签: php laravel laravel-4 eloquent

我正在尝试在UserController中调用此函数updateImpression()的路由上调用AJAX请求,并且此函数尝试在MySQL中存储的“users”表中递增名为“impressions_cpunt”的计数器列。我尝试使用Eloquent来更新一个特定用户的列。

public function updateImpression()
{
    $username = Input::get('username');
    $user = User::where('username', '=', $username)->first();
    $impressions_count = $user->impressions_count + 1;

    // save() method failed to update my database.
    // $user->impressions_count = $impressions_count;
    // $user->save();

    //update() method does not return anything. Any syntax error here?
    //$user->update(array('impressions_count' => $impressions_count));

    DB::table('users')
        ->where('username', $username)
        ->update(array('impressions_count' => $impressions_count));

    $user = User::where('username', '=', $username)->first();

    return $user->impressions_count;
}

我认为save()函数应该首先工作,但我的数据库没有得到更新并返回原始计数,而update()函数甚至没有从函数返回任何值。这仅在我使用DB时有效,但我认为Eloquent应该更好用,因为这是Laravel。我有什么遗漏或语法错误吗?我知道应该使用incrementments()数据类型,但请允许我在更改任何内容之前解决这个问题。

更新 当我使用save()方法时,这是我在Debugbar中显示的数据库查询:

select * from 'users' where 'username'= <test> limit 1
select count(*) as aggregate from 'users' where 'username'= <test>
select count(*) as aggregate from 'users' where 'email'= <test@example.org>

2 个答案:

答案 0 :(得分:4)

如果你的save()调用成功,用户对象(应该是Eloquent child)就像任何其他实体一样,会在更改后存储其状态。因此,无需明确更新记录。在你的情况下,我会用这样的东西:

public function updateImpression()
{
    $username = Input::get('username');
    $user = User::where('username', '=', $username)->first();
    $user->impressions_count += 1;
    $user->save();

    return $user->impressions_count;
}

答案 1 :(得分:1)

在Laravel 5.2中,您可以使用以下Eloquent构建器更新特定列:

public function update(Request $request, $id) {
    $user = User::where('id', $id)->update(['name', $request->name]);

    return redirect()->back()->with('status', trans('User has been updated successfully.'))
}