Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用cakephp 3从不同的数据库检索关联模型_Php_Mysql_Database_Cakephp_Cakephp 3.0 - Fatal编程技术网

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

使用cakephp 3从不同的数据库检索关联模型,php,mysql,database,cakephp,cakephp-3.0,Php,Mysql,Database,Cakephp,Cakephp 3.0,我正在开发一个应用程序,它将使用两个数据库:一个用于存储应用程序数据的主数据库,另一个用于检查用户名和其他只读内容。 因此,我在我的app.php中设置了两个不同的连接: 'Datasources' => [ 'default' => [ 'className' => 'Cake\Database\Connection', 'driver' => 'Cake\Database\Driver\Mysql', 'per

我正在开发一个应用程序,它将使用两个数据库:一个用于存储应用程序数据的主数据库,另一个用于检查用户名和其他只读内容。 因此,我在我的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]:找不到基表或视图:1146表“srddev.users”不存在

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


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

您可以尝试将关联中的
策略设置为
选择
。这可能会有帮助。目前还不完全支持跨模式关联。我做了一些工作,但不能解决所有的问题


我不确定它是在哪一个CakePHP 3版本中合并的,但我建议您及时了解发布周期。

什么是“没有成功”呢?怎么搞的?通常,如果DBMS支持交叉数据库连接,那么表名方法应该可以工作。嗨,如果我设置$this->table('spddev.users');在我的UsersTable.php和comment中,它是defaultConnectionName方法,当我尝试使用该模型时,我得到以下消息:SQLSTATE[42S02]:找不到基表或视图:1146表'srddev.users'不存在!谢谢@marlinc。令人好奇的是,蛋糕书上说这种策略已经是默认策略了()。@BrunoLamps很高兴听到它奏效了!你能不能在这本书上打开一个请求?完成!我以前从未这样做过,所以我不确定是否遗漏了什么。