在控制器CakePHP中使用同一函数中的两个数据库

时间:2016-03-26 12:14:54

标签: php mysql cakephp

我正在CakePHP中开发一个应用程序。我在同一个控制器中需要两个相同功能的数据库。在发票中,我需要在发票表中添加数据,但需要学生列表从另一个有学生表的数据库中显示。

   public function add() {
        if ($this->request->is('post')) {
            $this->Invoice->create();           
            $this->request->data['Invoice']['created_by'] = $this->Auth->user('id');
            if ($this->Invoice->save($this->request->data)) {
                $this->Session->setFlash(__('The Invoice has been saved.'), 'default', array('class' => 'alert alert-success'));    
            }
                return $this->redirect(array('action' => 'view',$Invoice_id));
            }
        // fetch students from different database.
        $this->loadModel('Student');
        $users = $this->Student->find('list',array('fields'=>array('Student.id','Student.name')));
}

我使用 public $ useDbConfig ='费用&#39 ;; 作为第二个数据库配置,但无法获取相同功能的数据。请帮忙。

<?php
class DATABASE_CONFIG {

    public $default = array(
        'datasource' => 'Database/Mysql',
        'persistent' => false,
        'host' => 'localhost',
        'login' => 'root',
        'password' => 'admin',
        'database' => 'inventory',
        'prefix' => '',
        //'encoding' => 'utf8',
    );
    // fetch students from fees controller.
    public $fees = array(
        'datasource' => 'Database/Mysql',
        'persistent' => false,
        'host' => 'localhost',
        'login' => 'root',
        'password' => 'admin',
        'database' => 'fees',
        'prefix' => '',
        //'encoding' => 'utf8',
    );
}

1 个答案:

答案 0 :(得分:1)

您需要声明您的Students模型将使用其他数据库源。您是说您使用public $useDbConfig = 'fees';而未提及您使用此属性的模型。

选中此link

  

然后我们可以在app / Config / database.php中配置数据源   文件通过添加这样的东西:

     

public $faraway = array( 'datasource' => 'FarAwaySource', 'apiKey' => '1234abcd', );

     

然后在我们的模型中使用数据库配置,如下所示:

     

class MyModel extends AppModel { public $useDbConfig = 'faraway'; }

所以fees看起来像应该在Invoice模型上使用的一些数据库:

class Invoice extends AppModel {
    public $useDbConfig = 'fees'; 
}

Students模型最有可能保留在默认数据库

class Students extends AppModel {
    public $useDbConfig = 'default';  // This line is optional. Even if you don't write this line your model will load data from the default database.
}

也许数据库是相反的,但我认为你明白了。

您仍然可以通过执行以下操作从Controller内部配置模型的数据库源:

public function add() {
    ...
    $this->Student->useDbConfig = 'fees'
    ...
}

或最优选的

public function add() {
    ...
    $this->Student->setDataSource('default')
    ...
}