CakePHP 3.0:如何检查查询构建器更新数据的执行情况
CakePHP 3.0: How to check execution of query builder updating data
我在后端使用 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()
的响应
任何帮助都会挽救我的一天。
使用cakephp中描述的模型方法getAffectedRows()
documentation.
根据文档:Model::getAffectedRows()
- Returns 上次查询影响的行数。
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();
}
Query::execute()
将 return 一个实现 \Cake\Database\StatementInterface
的语句对象,从而公开一个 rowCount()
方法,该方法 return 影响的行数声明。
所以你可以简单地做:
$affectedRows = $return->rowCount();
还有 Table::updateAll()
方法,您可以改用该方法,它完全按照您的操作执行(+ 关闭游标),并将 return 受影响的行数。
$affectedRows = $groupRegistry->updateAll(
['my_flag' => $params['flag']],
['id' => $params['id']]
);
另见
- Cookbook > Database Access & ORM > Saving Data > Bulk Updates
- API > \Cake\Database\StatementInterface::rowCount()
- API > \Cake\ORM\Table::updateAll()
ps
我希望你知道你在那里做什么,当使用低级查询时,你的数据不会被验证,模型保存事件不会被触发!
我在后端使用 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()
的响应任何帮助都会挽救我的一天。
使用cakephp中描述的模型方法getAffectedRows()
documentation.
根据文档:Model::getAffectedRows()
- Returns 上次查询影响的行数。
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();
}
Query::execute()
将 return 一个实现 \Cake\Database\StatementInterface
的语句对象,从而公开一个 rowCount()
方法,该方法 return 影响的行数声明。
所以你可以简单地做:
$affectedRows = $return->rowCount();
还有 Table::updateAll()
方法,您可以改用该方法,它完全按照您的操作执行(+ 关闭游标),并将 return 受影响的行数。
$affectedRows = $groupRegistry->updateAll(
['my_flag' => $params['flag']],
['id' => $params['id']]
);
另见
- Cookbook > Database Access & ORM > Saving Data > Bulk Updates
- API > \Cake\Database\StatementInterface::rowCount()
- API > \Cake\ORM\Table::updateAll()
ps
我希望你知道你在那里做什么,当使用低级查询时,你的数据不会被验证,模型保存事件不会被触发!