CakePHP 3.0:如何检查查询构建器更新数据

时间:2015-12-02 06:57:21

标签: 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');
  }
}

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

任何帮助都可以节省我的一天。

2 个答案:

答案 0 :(得分:2)

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

所以你可以这样做:

$affectedRows = $return->rowCount();

还有你可以使用的Table::updateAll()方法,它正是你在那里做的(+关闭光标),并将返回受影响的行数。

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

另见

PS

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

答案 1 :(得分:0)

使用模板方法 getAffectedRows() ,如cakephp documentation 中所述。

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

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