出于某种原因,当我在插件中使用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中进行更健壮的修复。
非常感谢蛋糕的人们的所有帮助。和耐心。