【问题标题】:CakePHP 3.1 plugin join tables not using custom datasourceCakePHP 3.1 插件连接表不使用自定义数据源
【发布时间】:2016-06-17 18:22:57
【问题描述】:

由于某种原因,当我在插件中使用可包含连接表时,Cake 使用默认数据源而不是自定义数据源。 我一直在使用 stackoverflow 和 Google,并且尝试了所有我能找到的方法,但均无济于事。

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

插件/Vorien/NPCData/config/app.php:

return [
    'Datasources' => [
        'npcdata' => [
            'className' => 'Cake\Database\Connection',
            'driver' => 'Cake\Database\Driver\Mysql',
            '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");
}

我使用 bake 来创建带有参数的所有内容:

  -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'的访问被拒绝(使用密码:YES) PersonasArchetypes 的 Auto-Tables 错误

我挖了很多,直到我意识到关键是'my_app'@'localhost',这意味着即使在 PersonasArchetypesTable Cake 中设置了 defaultConnectionName,它也仅将“默认”连接用于连接表。当我在 config/app.php 中设置默认连接时,一切正常。当然,这不适用于插件。

注意:连接表不是按字母顺序排列的,但在 3.0 中已更改为可选。我确实尝试过重命名连接表。

还有其他人遇到过这种情况吗?这可能是一个错误吗?还是我只是错过了什么?

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

【问题讨论】:

  • 您在 config/bootstrap.php 中配置插件时是否将 bootstrap 选项设置为 true? Like this : Plugin::load('npcdata', ['bootstrap' => true]);

标签: plugins datasource cakephp-3.0


【解决方案1】:

在插件中使用 joinTables 参数的表名时出现错误,它没有设置来自表对象的连接。

在 joinTables 或 through 选项中使用插件前缀表对象工作正常。

有一个补丁 #9018 计划在 3.2.12 中进行更强大的修复。

非常感谢蛋糕人的帮助。还有耐心。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2015-06-07
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    相关资源
    最近更新 更多