我正在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',
);
}
答案 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')
...
}