связь с несколькими базами данных в поле, отличном от первичного ключа в CakePHP
У меня есть проект, который обязательно охватывает несколько баз данных.
В одной базе данных есть таблицы:
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", я мог бы сделать это в аргументе "условия" для отношения hasOne или belongsTo от устройства к OsesPlatform, и на самом деле отношение hasOne между платформой и OsesPlatform работает хорошо. Однако мне нужно смоделировать взаимосвязь между устройством и платформой.
3 answers
Как оказалось, отношения HABTM между базами данных официально не поддерживаются в Cake (это из markstory на #cakephp). Хотя иногда это будет работать, неясно (по крайней мере, для меня), при каких условиях это будет работать, и нет никаких планов по улучшению поддержки для этого. Так что мне придется сделать это по-другому.
Возможно, на этой странице объясняется код, который вам нужен: http://blog .4webby.com/posts/view/6/cakephp_models_using_multiple_db_connections
Надеюсь, это поможет.
Саймон.
Я попытался воссоздать вашу структуру в cakeapp.com . Взгляните на схему по адресу http://cakeapp.com/sqldesigners/sql/oses
Но когда я пытаюсь добавить устройство в автоматически созданное приложение здесь: http://oses.cakeapp.com/cake/oses/devices/add это кажется немного неправильным.
Вы можете изменить структуру БД с помощью пароля: "операционные системы". И пусть cakeapp.com создайте приложение автоматически, щелкнув ссылку № 3: "Создайте приложение CakeApp на основе настройки и SQL"
Может быть, это вам поможет?