Bonjour,

J'ai suivi sur le cook book comment réalisé une liaison HABTM au travers d'une table de liaison, mais je rencontre un problème. En effet ces table sont sur deux bases de donner différentes.
J'ai une table projets sur la DB1 sans préfix et une table albums sur la DB2 qui comporte le préfix ssp_ que j'ai renseigné dans la connexion à la base. J'ai créé une table albums_projets sur la DB1 comme recommandé par le cook book.

Voici mes deux modela

class Projet extends AppModel {
    var $name = 'Projet';
    var $uses = array('Projet','Album');

    var $hasAndBelongsToMany = array(
        'Album' =>
            array(
                 'className' => 'Album',
                 'joinTable' => 'albums_projets',
                 'foreignKey' => 'projet_id',
                 'associationForeignKey' => 'album_id',
                 'unique' => true,
            )
    );

}

class Album extends AppModel {
    var $name = 'Album';
    var $useDbConfig = 'ssp';
    var $uses = array('Projet','Album');

        var $hasAndBelongsToMany = array(
        'Projet' =>
            array(
                 'className' => 'Projet',
                 'joinTable' => 'albums_projets',
                'foreignKey' => 'album_id',
                'associationForeignKey' => 'projet_id',
                'unique' => true,
            )
    );

}

A présent mon problème : Lorsque je me connecté à une vue du controller ProjetsController j'ai une erreur,

Missing Database Table
Error: Database table ssp_albums_projets for model AlbumsProjet was not found.

Et pas lorsque je me connecte à une vue du controller AlbumsController, je pense que cela et du au faite qu'il n'arrive pas à ce connecté à la DB2.

N'ayant pas trouvé de sujet traitant de ce ça particulier, j'espère que cela et possible à faire.
Merci d'avance.

7 réponses


idris
Auteur
Réponse acceptée

IL apparait que c'est un peu plus compliqué que cela qui fonctionne très bien dans la même base de données. C'est en effet ce que j'ai essayé de faire au début. Mais cela ne marche pas entre deux bases de données différentes. J'ai trouvé une solution, mais qui m'a paru trop complexe à mettre en œuvre. Je vous donne l' article qui parle en parle

si tu dois faire une liaison entre ces deux tables et que ces tables ne sont pas sur la meme base de donnée, ca me parait pas tres logique...

idris
Auteur

J'essai de liée mon application à une autre qui existe déjà. Mon portfolio à Slideshowpro director qui gérera les albums et les médias et mon application qui gérera les projets et des informations plus spécifiques à mon site.

ok donc une application qui gere les applications ^^

a mon avis tu ne peux pas le faire en une seule fois parce que tu ne peux pas avoir deux connexions simultanées au serveur sql il me semble... donc il faut récupérer ce que tu as besoin dans la premiere table, récupérer ce que tu as besoin dans la seconde en fonction de la premiere et mixer le tout mais attends d'autres avis parce que je ne suis pas sur pour les connexion simultannées

Bonjour,

Tu peux déclarer une deuxième base de données dans CakePHP dans le fichier de config. Donc tu dois pouvoir réaliser ce que tu veux. Ne l'ayant pas encore fait, je ne peux pas t'en dire plus :(

idris
Auteur

Oui en effet c'est ce que j'ai fait, j'ai deux DB dans app/config

Tu dois renseigner dans ton modèle quelle base tu dois utiliser en définissant la propriété $useDbConfig avec le nom du tableau que tu as défini dans ton fichier database.php.

Par exemple dans le fichier database.php :

DB1 = array(
    'driver'=>'mysqli',
    'persistant'=>false,
    'host'=>'localhost',
    'login'=>'root',
    'password'=>'root',
    'database'=>'DB1',
    'encoding'=>'UTF8',
    'prefix'=>'ssp_'
);
DB2 = array(
    'driver'=>'mysqli',
    'persistant'=>false,
    'host'=>'localhost',
    'login'=>'root',
    'password'=>'root',
    'database'=>'DB2',
    'encoding'=>'UTF8',
    'prefix'=>''
);

Dans le fichier Project.php :

class Projet extends AppModel {

    var $name = 'Projet';
    var $useDbConfig = 'DB1';
    var $uses = array('Projet','Album');

    var $hasAndBelongsToMany = array(
        'Album' =>
            array(
                 'className' => 'Album',
                 'joinTable' => 'albums_projets',
                 'foreignKey' => 'projet_id',
                 'associationForeignKey' => 'album_id',
                 'unique' => true,

            )
    );
}

Dans le fichier Album.php :

class Album extends AppModel {

    var $name = 'Album';
    var $useDbConfig = 'DB2';
    var $uses = array('Projet','Album');

        var $hasAndBelongsToMany = array(
        'Projet' =>
            array(
                 'className' => 'Projet',
                 'joinTable' => 'albums_projets',
                'foreignKey' => 'album_id',
                'associationForeignKey' => 'projet_id',
                'unique' => true,

            )
    );

}