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

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

我在后端使用 cakePHP 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()

的响应

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

使用cakephp中描述的模型方法getAffectedRows() documentation.

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

Update2:(试试这个)

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();
}

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

所以你可以简单地做:

$affectedRows = $return->rowCount();

还有 Table::updateAll() 方法,您可以改用该方法,它完全按照您的操作执行(+ 关闭游标),并将 return 受影响的行数。

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

另见

ps

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