CakePHP中除主键之外的字段上的多个数据库关系

时间:2009-11-19 22:17:29

标签: php cakephp associations multiple-databases

我有一个必须跨越多个数据库的项目。

一个数据库有表格:

CREATE TABLE device {
  device_uid integer unsigned not null primary key auto_increment,
  os varchar(50),
  name varchar(50)
}

CREATE TABLE platform {
  platform_id integer unsigned not null primary key auto_increment,
  name varchar(50)
}

另一个数据库有表:

CREATE TABLE oses_platforms {
  platform_id integer unsigned not null primary key auto_increment,
  os varchar(50),
  platform_id integer unsigned
}

我为表和关系创建了模型:

<?php
class Platform extends AppModel {

    var $name = 'Platform';
    var $useTable = 'platform';
    var $primaryKey = 'platform_id';
    var $useDbConfig = 'otherdb';

    var $hasOne = array(
        'OsesPlatform' => array(
            'className' => 'OsesPlatform',
            'foreignKey' => 'platform_id'
        )
    );
}

class Device extends AppModel {

    var $name = 'Device';
    var $primaryKey = 'device_uid';
    var $useDbConfig = 'otherdb';        

}

class OsesPlatform extends AppModel {

    var $useDbConfig = 'default';
    var $name = 'OsesPlatform';
    var $primaryKey = 'os';


        var $belongsTo = array(
                'Platform' => array(
                        'className' => 'Platform',
                        'foreignKey' => 'platform_id',                            
                ),
        );

        var $hasMany = array(
                'Device' => array(
                        'className' => 'Device',
                        'foreignKey' => 'os',
                        'dependent' => false,                            
                )
        );
}
?>

如果所有三个表都驻留在'default'或'otherdb'中,我可以在'conditions'参数中从一个hasOne或belongsTo关系从Device到OsesPlatform,实际上Platform和OsesPlatform之间的hasOne关系工作正常。但是,我需要建模设备和平台之间的关系。

3 个答案:

答案 0 :(得分:1)

事实证明,Cake中没有正式支持跨数据库的HABTM关系(这来自#cakephp上的markstory)。虽然它有时会起作用,但至少在我看来它不清楚它会起什么作用,并且没有计划改善对此的支持。所以我必须以另一种方式做到这一点。

答案 1 :(得分:0)

也许这个页面解释了你所追求的代码: http://blog.4webby.com/posts/view/6/cakephp_models_using_multiple_db_connections

希望有所帮助。

西蒙。

答案 2 :(得分:0)

我试图在cakeapp.com中重新创建你的结构。 请查看http://cakeapp.com/sqldesigners/sql/oses

上的架构

但是当我尝试在自动创建的应用中添加设备时:http://oses.cakeapp.com/cake/oses/devices/add这似乎有点不对。

您可以使用密码更改数据库结构:“oses”。然后让cakeapp.com通过单击链接#3自动创建应用程序:“根据设置和SQL构建CakeApp应用程序”

也许这有助于你?