如何在cakePHP中进行PDO查询?

Ráp*_*rás 0 cakephp

我的意思是必须在某个地方初始化一个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标准,根本不可能。

Bad*_*sie 5

访问数据源

您可以使用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