Я выполняю транзакцию БД следующим образом:
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
,
Это то, что я пытаюсь определить в моем коде, после того, как транзакция зафиксирована, какие-либо значения действительно обновлены.
Вы можете обновить, только если значение отличается от предыдущего:
$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);
Других решений пока нет …