CakePHP 3.0:如何检查查询生成器更新数据的执行情况


CakePHP 3.0: How to check execution of query builder updating data

我使用cakeHP 3.0作为后端API。这是我的密码。

namespace App'Controller;
use Cake'Datasource'ConnectionManager;
use Cake'ORM'TableRegistry;
use App'Controller'AppController;
use Cake'Routing'Router;
class MainController extends AppController {
   public function myMethod() {
       $groupRegistry = TableRegistry::get('MyModel');
       $query = $groupRegistry->query();
       $params = $this->request->data;
       $return = $query->update()
               ->set(['my_flag' => $params['flag']])
               ->where(['id' => $params['id']])
               ->execute();
       if (empty($return)) {
           return $this->outStatusJson('ERR100', 'Error Updating.');
       }
     return $this->outStatusJson('0', 'OK');
  }
}

我无法跟踪$query->update()的响应

任何帮助都能挽救我的一天。

Query::execute()将返回一个实现'Cake'Database'StatementInterface的语句对象,从而公开一个rowCount()方法,该方法返回受语句影响的行数。

所以你可以简单地做:

$affectedRows = $return->rowCount();

还有一个Table::updateAll()方法,您可以使用它,它完全按照您在那里所做的操作(+关闭光标),并返回受影响的行数。

$affectedRows = $groupRegistry->updateAll(
    ['my_flag' => $params['flag']],
    ['id' => $params['id']]
);

另请参见

  • 食谱>数据库访问&ORM>保存数据>批量更新
  • API>''Cake''Database''StatementInterface::rowCount()
  • API>''Cake''ORM''Table::updateAll()

ps

我希望你知道你在做什么,当使用低级别查询时,你的数据不会被验证,模型保存事件也不会被触发!

使用cakehp文档中描述的模型方法getAffectedRows()

根据文档:Model::getAffectedRows()-返回受上次查询影响的行数。

更新2:(试试这个)

public function getAffectedRows() {
    // Returns the number of rows affected by the last query
    //return $this->getDataSource()->lastAffected();
      $db =& ConnectionManager::getDataSource($this->useDbConfig);
      return $db->lastAffected();
}