我在CakePHP 3.4.6中有一个应用程序。它与3个遗留数据库进行交互 - 即根据CakePHP命名约定未编写的数据库。
我已在config/app.php
中配置了与这些数据库的连接:
'Datasources' => [
'default' => [
'host' => 'localhost',
'username' => '',
'password' => '',
'database' => 'substances_db'
],
'org_data' => [
'host' => 'localhost',
'username' => '',
'password' => '',
'database' => 'organisation_data_db'
],
...
]
我需要能够编写一个从“默认”数据库(substances_db
)中选择数据的查询,并使用“org_db”数据库中的数据执行JOIN
(organisation_data_db
)。
我没有将Cake的ORM用于应用程序的任何部分,因为有太多的表与Cake的约定相反。
我做事的方式是根据Cake Database Basics - Executing Queries的文档。
例如,在src/Model/SubstanceModel.php
中,我获得了与每个数据库的连接,因此我可以在我的模型中使用它们:
namespace App\Model;
use Cake\Datasource\ConnectionManager;
class SubstanceModel
{
protected $db_default;
protected $db_orgs;
public function __construct()
{
$this->db_default = ConnectionManager::get('default');
$this->db_orgs = ConnectionManager::get('org_data');
}
}
这意味着我可以在模型函数中编写查询,例如
public function getTotalSubstances()
{
// Executes query on "default" database ('substances_db')
$results = $this->db_default->execute('SELECT COUNT(DISTINCT(id)) AS total_substances FROM substances')->fetch('assoc');
return (int)$results['total_substances'];
}
所有这一切都很好。
但我现在需要编写一个查询,JOIN
对organisation_data_db
中的某些表执行SELECT * FROM substances_db.table1 JOIN organisation_data_db.table2 ...
。
我不知道该怎么做。 MySQL等价物是您将数据库名称作为查询中的表格的前缀,例如
SET OutputLocalEnvironment.WrittenDestination.File.Name = $yourfilename;
这是否可以在CakePHP 3.x中使用?