2

我将 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()的响应

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

4

2 回答 2

4

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

所以你可以简单地做:

$affectedRows = $return->rowCount();

还有Table::updateAll()一种你可以使用的方法,它完全按照你在那儿做的事情(+关闭光标),并将返回受影响的行数。

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

也可以看看

ps

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

于 2015-12-02T21:54:00.773 回答
0

使用 cakephp文档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();
}
于 2015-12-02T07:03:11.100 回答