relation de base de données multiples sur le champ autre que clé primaire dans CakePHP
-
21-09-2019 - |
Question
J'ai un projet qui couvre nécessairement plusieurs bases de données.
Une base de données a des tables:
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)
}
L'autre base de données a la table:
CREATE TABLE oses_platforms {
platform_id integer unsigned not null primary key auto_increment,
os varchar(50),
platform_id integer unsigned
}
Je l'ai créé des modèles pour les tables et la relation:
<?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,
)
);
}
?>
Si les trois tables résidèrent dans « défaut » ou « autrebase », je pourrais le faire dans l'argument « conditions » à une relation hasOne ou belongsTo du périphérique à OsesPlatform, et en fait la relation hasOne entre la plate-forme et OsesPlatform fonctionne très bien . Cependant, il est la relation entre l'appareil et la plate-forme que je dois modéliser.
La solution
Il se trouve que, les relations HABTM à travers les bases de données ne sont pas officiellement pris en charge dans Cake (ce de markstory sur # cakephp). Bien qu'il fonctionne parfois, on ne sait pas (au moins pour moi) dans quelles conditions il fonctionne, et il n'y a aucun plan pour améliorer le soutien à cet effet. Je vais donc faire de cette façon une autre.
Autres conseils
Peut-être cette page explique le code que vous êtes après: http://blog.4webby.com/posts/view/6/cakephp_models_using_multiple_db_connections
L'espoir qui aide.
Simon.
J'ai essayé de recréer votre structure cakeapp.com. Jetez un coup d'oeil au schéma http://cakeapp.com/sqldesigners/sql/oses
Mais lorsque je tente d'ajouter un périphérique dans l'application automatiquement créé ici: http: //oses.cakeapp.com/cake/oses/devices/add il semble un peu mal.
Vous pouvez modifier la structure DB avec le mot de passe: "oses". Et nous allons cakeapp.com créer l'application automatiquement en cliquant sur le lien # 3: « Construire l'application CakeApp en fonction des paramètres et SQL »
Peut-être que cela vous aide?