Я использую 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-> обновление ()
Любая помощь спасет мой день.
Query::execute()
вернет объект оператора, который реализует \Cake\Database\StatementInterface
и, таким образом, выставляет rowCount()
метод, который возвращает количество строк, затронутых оператором.
Так что вы можете просто сделать:
$affectedRows = $return->rowCount();
И есть также Table::updateAll()
метод, который вы могли бы использовать вместо этого, он делает именно то, что вы делаете там (+ закрытие курсора), и возвращает количество затронутых строк.
$affectedRows = $groupRegistry->updateAll(
['my_flag' => $params['flag']],
['id' => $params['id']]
);
Смотрите также
п.с.
Я надеюсь, что вы знаете, что вы там делаете, когда используете низкоуровневые запросы, ваши данные не будут проверяться, а события сохранения модели не инициируются!
Используйте метод модели getAffectedRows()
как описано в CakePHP документация.
Согласно документу: 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();
}