3

我试图在 UserController 中调用此函数 updateImpression() 的路由上调用 AJAX 请求,并且此函数尝试增加存储在 MySQL 中的“用户”表中名为“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。我错过了什么或语法有什么问题吗?我知道应该使用 increments() 数据类型,但请允许我在更改任何内容之前解决这个问题。

更新: 这是我使用 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>
4

2 回答 2

4

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

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

    return $user->impressions_count;
}
于 2013-10-26T19:25:52.103 回答
2

在 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.'))
}
于 2016-02-07T09:36:26.733 回答