我使用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()的响应
任何帮助都可以节省我的一天。
答案 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();
}