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

May*_*ama 3 php cakephp query-builder cakephp-3.x

我使用 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');
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

ndm*_*ndm 5

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

所以你可以简单地这样做:

$affectedRows = $return->rowCount();
Run Code Online (Sandbox Code Playgroud)

还有一种Table::updateAll()您可以使用的方法,它完全执行您正在执行的操作(+关闭游标),并将返回受影响的行数。

$affectedRows = $groupRegistry->updateAll(
    ['my_flag' => $params['flag']],
    ['id' => $params['id']]
);
Run Code Online (Sandbox Code Playgroud)

也可以看看

附注

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