必然的に複数のデータベースにまたがるプロジェクトがあります。
1 つのデータベースにはテーブルがあります。
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,
)
);
}
?>
3 つのテーブルすべてが 'default' または 'otherdb' に存在する場合、Device から OsesPlatform への hasOne または belongsTo 関係の 'conditions' 引数でそれを行うことができ、実際、Platform と OsesPlatform の間の hasOne 関係は正常に機能します。ただし、モデル化する必要があるのは、デバイスとプラットフォームの関係です。