如何在cakePHP中进行PDO查询?

时间:2014-05-23 09:36:08

标签: 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.'));
        }

我想简单地进行查询,例如INSERT INTO firms_users (user_id,firm_id) VALUES ($u,$f),因为这是HABTM模型无法为我做的。

如果这是使用交易完成的话会很棒,但我想,使用cakePHP标准,根本不可能。

2 个答案:

答案 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();

http://book.cakephp.org/2.0/en/models/transactions.html

答案 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();