我使用cakeHP 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()的响应
任何帮助都能挽救我的一天。
Query::execute()
将返回一个实现'Cake'Database'StatementInterface
的语句对象,从而公开一个rowCount()
方法,该方法返回受语句影响的行数。
所以你可以简单地做:
$affectedRows = $return->rowCount();
还有一个Table::updateAll()
方法,您可以使用它,它完全按照您在那里所做的操作(+关闭光标),并返回受影响的行数。
$affectedRows = $groupRegistry->updateAll(
['my_flag' => $params['flag']],
['id' => $params['id']]
);
另请参见
- 食谱>数据库访问&ORM>保存数据>批量更新
- API>''Cake''Database''StatementInterface::rowCount()
- API>''Cake''ORM''Table::updateAll()
ps
我希望你知道你在做什么,当使用低级别查询时,你的数据不会被验证,模型保存事件也不会被触发!
使用cakehp文档中描述的模型方法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();
}