【问题标题】:Cannot update all columns using looping无法使用循环更新所有列
【发布时间】:2021-12-17 08:25:45
【问题描述】:

我有一些数据要更新,我想使用这些数据更新表中的所有行。因此,我尝试获取所有数据,然后遍历我的数据并使用新数据设置行,但它仅适用于第一行。如何更新我的所有行?

这是我的代码,我使用 activerecord 来更新:

$replaceid = $_POST['pid'];
$product = ProductModel::find()->where(['createdby'=>$uid])->orWhere(['modifiedby'=>$uid])->all();

  if(isset($product)) {
     foreach ($product as $p) {
       $p->createdby = $replaceid;
       $p->modifiedby = $replaceid;

       $p->update(false);
     }
  }

这只是更新 createdby 但对于 modifiedby 仍然相同..这里有什么问题?

【问题讨论】:

  • $replaceid 是否不等于modifiedby 的初始值(更新前)?
  • @Akina 是的,之前的值不同
  • 暂时在你的 MySQL 上启用 General Log,看看 MySQL 从程序中收到了什么 SQL 查询。

标签: php mysql activerecord


【解决方案1】:

这可以完全在数据库端完成,因此可以消除您在 PHP 中可能遇到的任何问题

ProductModel::query()->where(['createdby'=>$uid])->orWhere(['modifiedby'=>$uid])->update(['createdby' => $replaceid, 'modifiedby'=> $replaceid]);

【讨论】:

    猜你喜欢
    • 2015-07-28
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    • 2017-03-11
    • 1970-01-01
    相关资源
    最近更新 更多