Bru*_*mps 3 php mysql database cakephp cakephp-3.0
我正在开发一个将使用两个数据库的应用程序:一个用于存储应用程序数据的主数据库和一个用于检查用户名和其他只读内容的第二个数据库。所以我在app.php 中设置了两个不同的连接:
'Datasources' => [
'default' => [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Mysql',
'persistent' => false,
'host' => '192.168.2.31',
'username' => 'srddev',
'password' => 'srddev',
'database' => 'srddev',
'encoding' => 'utf8',
'timezone' => 'UTC',
'cacheMetadata' => true,
'log' => false,
'quoteIdentifiers' => false,
],
'spd' => [
'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Mysql',
'persistent' => false,
'host' => '192.168.2.31',
'username' => 'spddev',
'password' => 'spddev',
'database' => 'spddev',
'encoding' => 'utf8',
'timezone' => 'UTC',
'cacheMetadata' => true,
'log' => false,
'quoteIdentifiers' => false,
],
Run Code Online (Sandbox Code Playgroud)
之后,我在Model/Table/UsersTable.php 中放置了一个方法,以便蛋糕知道该表使用不同的数据库:
public static function defaultConnectionName() {
return 'spd';
}
Run Code Online (Sandbox Code Playgroud)
我正在使用此表对用户进行身份验证,它工作正常。但是现在我想将此模型与我的主数据库中的“pedidos”(订单)模型相关联,但它无法正常工作。我正在我的PedidosController.php 中尝试这个:
public function index()
{
$this->paginate = [
'contain' => ['Users']
];
$this->set('pedidos', $this->paginate($this->Pedidos));
$this->set('_serialize', ['pedidos']);
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用。我收到以下错误:错误:SQLSTATE[42S02]:未找到基表或视图:1146 表 'srddev.users' 不存在
好吧,我不应该在srddev数据库中寻找这个表,它属于spddev,正如我在我的 UsersTable.php 中所指出的。我如何告诉 cakephp 应该在不同的连接中查询该表?
Ps.:两个“数据库”实际上都是同一个mysql服务器中的模式。我尝试使用默认连接并配置$this->table('spddev.users');连接到 spddev.users 表;,但没有成功。
您可以尝试将strategy关联中的设置为select。这可能会有所帮助。尚不完全支持跨架构关联。我已经投入了一些工作,但它不会解决所有情况。
我不确定它合并到哪个 CakePHP 3 版本中,但我建议您及时了解发布周期。