CAKEPHP 3.1插件连接表不使用自定义数据源



出于某种原因,当我在插件中使用Join Table可容纳时,Cake使用默认数据源而不是自定义。我已经遍布Stackoverflow和Google,并且尝试了我无法找到的一切。

我正在尝试创建一个使用自己数据源的插件:

插件/vorien/npcdata/config/app.php:

return [
    'Datasources' => [
        'npcdata' => [
            'className' => 'CakeDatabaseConnection',
            'driver' => 'CakeDatabaseDriverMysql',
            'persistent' => false,
            'host' => 'localhost',
            'username' => 'npcdata',
            'password' => '********',
            'database' => 'npcdata',
            'encoding' => 'utf8',
            'timezone' => 'UTC',
            'flags' => [],
            'cacheMetadata' => true,
            'log' => false,
            'quoteIdentifiers' => true,
            'url' => env('DATABASE_URL', null),
        ],
    ],
];

插件/vorien/npcdata/config/bootstrap.php:

try {
    Configure::config('npcdata', new PhpConfig(Plugin::path('Vorien/NPCData') . 'config/'));
    Configure::load('app', 'npcdata');
    ConnectionManager::config(Configure::consume('Datasources'));
} catch (Exception $e) {
    exit($e->getMessage() . "n");
}

我使用烘焙用参数创建所有内容:

  -p Vorien/NPCData -c npcdata

我的联接表看起来像:

$this->belongsTo('Personas', [
    'foreignKey' => 'persona_id',
    'className' => 'Vorien/NPCData.Personas'
]);
$this->belongsTo('Archetypes', [
    'foreignKey' => 'archetype_id',
    'className' => 'Vorien/NPCData.Archetypes'
]);

和:

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

运行hasone或Hasmany:

$persona = $this->Personas->get($id, [
    'contain' => ['People']
]);

当我尝试使用HABTM运行任何内容时:

$persona = $this->Personas->get($id, [
    'contain' => ['Archetypes']
]);

我得到: 错误:sqlstate [hy000] [1045]访问用户'my_app'@'localhost'(使用密码:是)具有personArcheTypes的自动表错误

我挖了很多东西,直到我意识到钥匙是'my_app'@'localhost',这意味着即使在personAlarcheTypeStable中设置了defaultConnectionName,也仅使用"默认"连接来加入表。当我在config/app.php中设置默认连接时,一切都可以。当然,这对插件不起作用。

注意:联接表不是字母顺序的,但这已更改为3.0中的可选。我确实尝试过重命名加入表。

还有其他人遇到过吗?可能是一个错误吗?还是我只是缺少什么?

编辑:我还尝试在HABTM的所有三个表文件中的表格上添加数据库名称。(Database.Table而不是仅表)

在插件中使用表名的表名时有一个错误

使用插件的插件前缀表对象或通过选项的插件都很好。

有一个补丁#9018,计划在3.2.12中进行更健壮的修复。

非常感谢蛋糕的人们的所有帮助。和耐心。

最新更新