我的意思是必须在某处初始化PDO对象,我想使用它而不是创建并行连接。
根据要求,这是它背后的故事: 我正在制作一个注册表,它可以保存两个模型,(公司和用户),它们之间有HABTM连接。 CakePHP无法以这种形式使用HABTM,所以在不破坏模型的情况下我必须做这样的事情:
if ($this->request->is('post')) {
$this->Firm->create();
if ($this->Firm->saveAll($this->request->data)) {
for($i=0; $i<count($this->request->data['User']); $i++){ //működik :)
$this->User->create(); // ?
$a = $this->request->data['User'][$i];
$b = randomString(28);
$a['password'] = $b;
$a['plain_password'] = $b;
if($this->User->save($a)){
$this->Session->setFlash(__('The firm and a user have been saved.')); // no good
}
}
//$this->Session->setFlash(__('The firm has been saved.'));
return $this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The firm could not be saved. Please, try again.'));
}
我想简单地进行查询,例如INSERT INTO firms_users (user_id,firm_id) VALUES ($u,$f)
,因为这是HABTM模型无法为我做的。
如果这是使用交易完成的话会很棒,但我想,使用cakePHP标准,根本不可能。
答案 0 :(得分:4)
访问数据源
您可以使用Model::getDataSource()访问模型的数据源。
另请参阅:http://book.cakephp.org/2.0/en/models/datasources.html
运行手动查询
如果要在不使用Cake的内置模型查询方法和关系的情况下运行手动查询,可以执行以下操作:
$this->MyModel->query("INSERT INTO firms_users (user_id,firm_id) VALUES ($u, $f)");
请记住,此处的数据不受SQL注入保护。
<强>交易强>
我刚看到您想要运行交易的编辑。是的,你可以用Cake做到这一点。模型的数据源对象具有此方法。您只需要在将参与查询的任何一个模型上开始交易。
// Get the datasource
$datasource = $this->getDataSource();
// Start transaction
$datasource->begin();
// Rollback
$datasource->rollback();
// Commit
$datasource->commit();
答案 1 :(得分:0)
如何从任意位置访问CakePHP3中默认连接的PDO:
/** @var \Cake\Database\Connection $Connection */
$Connection = ConnectionManager::get('default');
if (!$Connection->isConnected())
$Connection->connect();
$PDO = $Connection->getDriver()->getConnection();
要访问Cake\ORM\Table
对象内部的PDO,可以使用$Connection = $this->getConnection();