связь с несколькими базами данных в поле, отличном от первичного ключа в 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 работает хорошо. Однако мне нужно смоделировать взаимосвязь между устройством и платформой.

Author: Kit Peters, 2009-11-20

3 answers

Как оказалось, отношения HABTM между базами данных официально не поддерживаются в Cake (это из markstory на #cakephp). Хотя иногда это будет работать, неясно (по крайней мере, для меня), при каких условиях это будет работать, и нет никаких планов по улучшению поддержки для этого. Так что мне придется сделать это по-другому.

 1
Author: Kit Peters, 2009-11-24 19:25:47

Возможно, на этой странице объясняется код, который вам нужен: http://blog .4webby.com/posts/view/6/cakephp_models_using_multiple_db_connections

Надеюсь, это поможет.

Саймон.

 0
Author: Simon East, 2009-11-21 03:16:01

Я попытался воссоздать вашу структуру в cakeapp.com . Взгляните на схему по адресу http://cakeapp.com/sqldesigners/sql/oses

Но когда я пытаюсь добавить устройство в автоматически созданное приложение здесь: http://oses.cakeapp.com/cake/oses/devices/add это кажется немного неправильным.

Вы можете изменить структуру БД с помощью пароля: "операционные системы". И пусть cakeapp.com создайте приложение автоматически, щелкнув ссылку № 3: "Создайте приложение CakeApp на основе настройки и SQL"

Может быть, это вам поможет?

 0
Author: powtac, 2009-11-24 17:21:16