php - 使用 cakephp 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,
    ],

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

 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]:找不到基表或 View :1146 表 'srddev.users' 不存在

好吧,我不应该在 srddev 数据库中寻找这个表,它属于 spddev,正如我在我的 UsersTable.php 中指出的那样。我如何告诉 cakephp 这个表应该在不同的连接中查询?

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

最佳答案

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

我不确定它合并到哪个 CakePHP 3 版本中,但我确实建议及时了解发布周期。

关于php - 使用 cakephp 3 从不同的数据库中检索关联模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36631030/

相关文章:

mysql - 优化 MySQL 查询

database - 在 Django 中,如何在我的 models.py 中包含一些默认记录?

sql-server - 如何加快从大型数据库表中删除的速度?

javascript - 如何使用按钮发送当前页面的电子邮件?

php - 比较时间戳

php - 截至 2012 年 11 月,通过 json 和 php 获取 youtube 数据的正确语法是什么?

php - blueimp/jQuery-File-Upload直接上传到S3

php - sql查询的两种形式

mysql - 如何在MySQL表中查找特定列名并清除结果?

sql - 填补稀疏数据中的日期空白