我执行这样的数据库交易:
DB::beginTransaction();
try
{
foreach ($updates as $column_name => $new_value) {
DB::table('my_table')
->where('id', '=', $line_id)
->update(array($column_name => $new_value));
}
DB::commit();
return Response::make('Updated', 200);
}
catch (Exception $ex)
{
DB::rollback();
return Response::make('Error - '. $ex->getMessage(), 500);
}
执行DB::commit();
时是否可以获取受影响/更新的行数并在我的回复中返回?
修改
$updates
包含key
= value
数组(其中key
是列名)。
如果发生类似这样的更新:UPDATE some_table SET some_number = some_number WHERE id = 1
,受影响的行数将为0
(即没有真正更改)。
但是,如果发生类似这样的更新:例如UPDATE some_table SET some_number = some_number + 1 WHERE id = 1
,则会导致受影响的行数1
。
这是我在我的代码中尝试确定的,一旦事务提交,任何值都已真正更新。
答案 0 :(得分:0)
只有在值与过去的值不同时才能更新:
$count = DB::table('my_table')
->where('id', '=', $line_id)
->where($column_name, '!=', $new_value)
->count();
通过这种方式,您可以说出给定的行是否具有不同的值以及是否要更改它。
查询前的count
:
$number = DB::table('my_table')
->where('id', '=', $line_id)
->count();
回复:
return Response::make('Updated ' . $number, 200);