使用Raw,如何返回更新行的集合?
例如:
$updated = DB::table('users')->where('id', 1)->update(['votes' => 123]);
我希望dd($updated)
返回更新的集合行,但它返回1。
{{$updated->votes}} should return 123
答案 0 :(得分:4)
另一种有效地通过轻敲链接更新方法调用的方法来返回新的更新模型:
$user = tap($user)->update(['votes' => 123]);
答案 1 :(得分:4)
尝试一下
$updated = tap(DB::table('users')->where('id', 1))
->update(['votes' => 123])
->first();
答案 2 :(得分:2)
这不是它的工作原理。您不能指望此查询会返回一个对象:
$updated = DB::table('users')->where('id', 1)->update(['votes' => 123]);
如果您只想按照问题中的提法使用查询生成器,则需要手动获取对象:
$data = DB::table('users')->where('id', 1)->first();
使用Eloquent,您可以使用updateOrCreate()
:
$data = User::where('id', 1)->updateOrCreate(['votes' => 123]);
这将返回一个对象。 update()
将返回布尔值,因此您无法在此处使用它。
答案 3 :(得分:0)
您可以执行以下操作
use Response;
public function edit(Request $request, $id)
{
SomeModel::where('id', $id)->update([
'image' => $request->image,
'name' => $request->name,
]);
return Response::json(array(
'row' => SomeModel::findOrFail($id)));
}
答案 4 :(得分:0)
更新后您将再次获得第一行,请参见下面的示例
$user = User::where('id', 1);
$userOld = $user->first(); // will return the first row
$isUserUpdated = $user->update(['name'=>'new name']); // will return true or false
$updatedUser = $user->first(); // now it will return you the latest updated data
在此示例中,您有旧数据和新数据,并且是数据更新结果,现在我们可以返回新数据。
return response()->json(['status' => $isUserUpdated,'data'=>$updatedUser], 200);
答案 5 :(得分:0)
这也返回更新的行:
$user = $user->fill(['votes' => 123])->save();
答案 6 :(得分:-1)
关于数据库的所有函数都返回与通过php运行原始查询相同的值。
如果您在PHP中运行 UPDATE 或 INSERT 查询,则会返回布尔值。 Laravel update()
中的相同内容返回1或0。
它完全正常,只有在幕后使用SELECT的函数才会返回一个包含行的对象。例如:first()
,get()
,find()
等。
答案 7 :(得分:-1)
找到模型,更新模型,给我新鲜的模型
在5.4或更高版本中,您可以:
$updatedUser = tap(User::where('id', 1))->update(['votes' => 123])->fresh();
答案 8 :(得分:-2)
在控制器中,您可以在下面编写更新代码:
$updated = DB::table('users')->where('id', 1)->update(['votes' => 123])->get();