我的意思是必须在某个地方初始化一个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.'));
}
Run Code Online (Sandbox Code Playgroud)
我只想简单地进行查询,例如INSERT INTO firms_users (user_id,firm_id) VALUES ($u,$f),因为由于HABTM,模型无法为我完成查询。
如果这是使用事务完成的,那就太好了,但是我想,使用cakePHP标准,根本不可能。
访问数据源
您可以使用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)");
Run Code Online (Sandbox Code Playgroud)
请记住,此处的数据不受SQL注入的保护。
交易次数
我刚刚看到您关于要运行事务的编辑。是的,您可以使用Cake做到这一点。模型的数据源对象具有用于此目的的方法。您只需要在查询所涉及的任何一种模型上开始事务。
// Get the datasource
$datasource = $this->getDataSource();
// Start transaction
$datasource->begin();
// Rollback
$datasource->rollback();
// Commit
$datasource->commit();
Run Code Online (Sandbox Code Playgroud)
http://book.cakephp.org/2.0/en/models/transactions.html