【问题标题】:Cakephp use belongsTo on multiple databasesCakephp 在多个数据库上使用 belongsTo
【发布时间】:2013-07-24 16:41:01
【问题描述】:

我需要将一个表移动到另一个数据库。

如果我这样做,所有 HABTM 关系都可以通过使用像 this 这样的教程正常工作。

但是在其他模型中存在belongsTo和hasMany关系,在find()函数中似乎被跳过了。

我发现:

if databases for model is different the join build is bypassed. in source_dbo

有没有不深入代码的顺利解决方法?

表:DB1 上的 A、B 表:DB2 上的 C

表:A 属于 C 表:B HABTM C

在模型 A 上创建 find(),只返回表 A 中的数据。 在模型 B 上 find() 返回表 B 和 C 中的所有连接数据。

【问题讨论】:

    标签: cakephp-1.3


    【解决方案1】:

    不确定为什么默认情况下禁用/限制此功能(希望在我继续开发此产品时会发现),但在为此苦苦挣扎了几个小时后,我决定弄乱 /lib/cake/Model/DataSource/ DboSoure.php 类并删除了限制。

    //<-- commented out line 1064
    //if ($model->useDbConfig === $linkModel->useDbConfig) { 
    
        if ($bypass) {
                $assocData['fields'] = false;
        }
        if ($this->generateAssociationQuery($model, $linkModel, $type, $assoc, $assocData, $queryData, $external, $null) === true) {
                $linkedModels[$type . '/' . $assoc] = true;
        }
    
    //} <-- commented out line 1071
    

    之后,$belongsTo 关系一切正常。

    【讨论】:

    • 我刚刚注意到的一个意想不到的副作用是,在返回 find('all') 的字段时,cake 将默认使用您查询的主模型来获取别名,而不是智能地确定基于字段名称的别名。例如您在 DB1 中使用模型 Comment 进行查询,在 DB2 中使用 $belongsTo 模型 User 进行查询。如果您将字段指定为 array('first_name', 'title') cake 返回 array('Comment.first_name', 'Comment.title') 而不是 array('User.first_name', 'Comment.title') 我现在可以接受明确指定模型名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多