Laravel Eloquent更新受影响的行数始终为1

时间:2016-09-17 10:52:30

标签: php mysql laravel laravel-5 eloquent

我是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。

3 个答案:

答案 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]);