我是laravel的新手。我面临的问题是,
当我尝试使用laravel更新表中具有相同数据的列时 雄辩的受影响的行给我总是1。
这是我运行update时运行的查询:
update `table` set `updating_column` = 1, `updated_at` = 2016-09-17 15:56:53;
在上面的查询laravel更新updated_at
列以及我请求更新的列。
这就是为什么我总是受到1行影响。
是否可以通过updated_at
列获取实际受影响的行。
编辑:
$modelobj = new Model();
$aftcnt = $modelobj->where(['ssnid'=>Session::get('SSNID')])
->update([updating_column'=>1]);
当我一直刷新页面时,变量$aftcnt
给我1。
答案 0 :(得分:1)
正如您已经注意到的,MySQL报告说有1行受到影响,因为该行是"触及"意味着时间戳已更新。您可以通过以下方式解决问题;
在执行更新之前运行查询:
$aftcnt = $modelobj->where('ssnid', Session::get('SSNID'))
->whereNot('updating_column', 1)->count();
禁用触摸时运行更新:
$modelobj->where(['ssnid'=>Session::get('SSNID')])
->update(['updating_column'=>1], ['touch' => false]);
当您停用触控功能时,它不会尝试更改时间戳。
答案 1 :(得分:0)
对于Laravel 5
您可能会看到获取受影响的行的示例
$ids=[10,20,30,40];
$affectedRow=DB::update('update users set is_archive = 1, status=0 where id != ?', $ids);
echo $affectedRow;
exit;
答案 2 :(得分:0)
您需要通过添加条件
来添加要更新的行强度的条件`updating_column` = 0;
像这样
update `table` set `updating_column` = 1, `updated_at` = `2016-09-17 15:56:53` where `updating_column` = 0;
例如
$modelobj = new Model();
$aftcnt = $modelobj->where(
[
'ssnid' => Session::get('SSNID'),
'updating_column' => 0
])
->update(['updating_column' => 1]);