在包含的关系中使用多个数据库连接

时间:2015-10-14 18:35:27

标签: cakephp-3.0

在CakePHP 2中,find()将从不同数据库中的相关模型返回数据,只要我在每个模型文件中正确设置$ useDbConfig即可。例如:

class Project extends AppModel {    
  public $useDbConfig = 'db1';

  public $belongsTo = array(
      'Client'
  );
}

class Client extends AppModel { 
  public $useDbConfig = 'db2';
}

//in controller:
$this->Project->find('first'); //will get Client data

在CakePHP 3中,我使用defaultConnectionName()设置了我的表模型文件,并且在我的控制器中我使用带有'contains'的get()来获取相关模型,但我的一个相关表是在不同的数据库CakePHP 2似乎会发出一个单独的查询来获取这些数据,看起来像Cake 3尝试加入表,并且失败了“未定义的表:关系不存在。”

class ProjectsTable extends Table { 
  public static function defaultConnectionName() {
    return 'db1';
  }
  public function initialize(array $config){
    $this->addAssociations([
      'belongsTo' => [
        'Clients'
       ]
    ]);
  } 
}

class ClientsTable extends Table {  
  public static function defaultConnectionName() {
    return 'db2';
  }
}

//in controller:
$this->Projects->get($id,[
  'contain' => [
    'Clients'
  ]
]); //issues error that 'clients' relation does not exist

如果我直接在相关模型上使用get(),它运行正常 - 所以defaultConnectionName()是好的,但是当模型被查询为包含关系时,Cake会忽略它吗?或者我如何以不同的方式解决这个问题呢?

编辑:我的问题的解决方案来自CakePHP 3.x的更高版本:Changing Fetching Strategies。在另一个表的关联上设置'strategy' => 'select'使得连接可以像在Cake 2中一样无缝地再次工作。

0 个答案:

没有答案