使用cakephp 3从不同的数据库中检索关联的模型

时间:2016-04-14 18:22:30

标签: 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,
    ],

之后我在 Model / Table / UsersTable.php 中添加了一个方法,所以蛋糕会知道这个表使用了不同的数据库:

 public static function defaultConnectionName() {
     return 'spd';
   }

我正在使用此表对用户进行身份验证,它运行正常。但是现在我想把这个模型和我的“pedidos”(订单)模型从我的主数据库中联系起来,并且它运行不正常。 我在 PedidosController.php

中尝试这个
 public function index()
{
    $this->paginate = [
        'contain' => ['Users']
    ];
    $this->set('pedidos', $this->paginate($this->Pedidos));
    $this->set('_serialize', ['pedidos']);
}

但它不起作用。我收到以下错误:      错误:SQLSTATE [42S02]:找不到基表或视图:1146表'srddev.users'不存在

好吧,我不应该在 srddev 数据库中查找此表,它属于 spddev ,因为我在UsersTable.php中发出了信号。如何告诉cakephp应该在不同的连接中查询此表?

Ps。:两个“数据库”实际上是同一个mysql服务器中的schemmas。我尝试使用默认连接并配置 $ this-> table('spddev.users'); 连接到spddev.users表,但没有成功。

1 个答案:

答案 0 :(得分:4)

您可以尝试将关联中的strategy设置为select。这可能有所帮助。目前还没有完全支持交叉模式关联。我已经做了一些工作,但它不会解决所有情况。

我不确定它合并的CakePHP 3版本,但我建议保持最新的发布周期。