我正在尝试在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>
答案 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.'))
}