我有一个必须跨越多个数据库的项目。
一个数据库有表格:
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关系工作正常。但是,我需要建模设备和平台之间的关系。
答案 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应用程序”
也许这有助于你?