gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 20:08:35 25 4
gpt4 key购买 nike

我正在开发一个将使用两个数据库的应用程序:一个主数据库用于存储应用程序的数据,另一个用于检查用户名和其他只读内容。所以我在我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com