2010-12-06 28 views
0

Dans mon application, j'ai besoin d'interroger une table dans une base de données externe, qui est liée à ma base de données par défaut par une relation plusieurs à plusieurs. Ma table intermédiaire est située dans ma base de données par défaut. Pour ce faire, j'ai modifié mon database.yml pour inclure la base de données externe. J'ai ensuite ajouté à mon schéma.yml à la fois la table intermédiaire (message_news_rel, situé dans ma base de données par défaut), et la table de la source externe (news).Symfony Relation plusieurs-à-plusieurs avec base de données externe

Voilà comment je spécifié les relations:

MessageNews: 
    connection: uda_iPoste 
    tableName: message_news_rel 
    columns: 
    message_id: 
     type: integer(10) 
     primary: true 
    news_id: 
     type: integer(10) 
     primary: true 
    relations: 
    Message: 
     local: message_id 
     foreign: id 
     foreignAlias: MessageNewses 
    News: 
     local: news_id 
     foreign: id 
     foreignAlias: MessageNewses 

News: 
... 
    relations: 
    Messages: 
     class: Message 
     foreignAlias: Newses 
     refClass: MessageNews 
     local: news_id 
     foreign: message_id 

Message: 
... 
    relations: 
    Newses: 
     class: News 
     foreignAlias: Messages 
     refClass: MessageNews 
     local: message_id 
     foreign: news_id 

Quand j'essayer d'utiliser le modèle dans mon application, je reçois cette erreur:

Base table or view not found: 1146 Table 'uda_web_dev.message_news_rel' doesn't exist 

... sans doute en référence à cette partie de la requête:

FROM news n LEFT JOIN message_news_rel 

Ceci me laisse supposer que Symfony n'a pas changé la connexion de ma base de données par défaut à ma base de données externe lors de la tentative de créer la relation.

S'il vous plaît laissez-moi savoir si j'ai omis des détails importants.

Y a-t-il un correctif connu pour ce problème?

+0

Je suis à peu près certain que les relations ne peuvent pas être réparties sur les connexions parce que ... Vous pouvez ajouter le tag 'Doctrine' à ceci et ce n'est pas vraiment un problème de symfony mais un problème de Doctrine. – prodigitalson

+0

@prodigitalson Merci. Je l'ajoute en ce moment. –

Répondre

0

Si vous y réfléchissez rationnellement, ce que vous demandez est un peu trop. Chaque requête ou transaction doit impliquer uniquement les tables qui existent sur la base de données que vous allez exécuter. N'oubliez pas que l'abstraction de la base de données a toujours ses limites, et si vous vérifiez chaque implémentation, ils résument la création et la manipulation de la requête, mais je ne vois pas comment ils ne peuvent pas résumer les bases de données. Par conséquent, si vous devez absolument séparer vos bases de données, implémentez une sorte de cluster dabatase. Sinon, les tables d'implémentation d'une requête sont situées dans la même base de données, puis les résultats sont joints dans symfony.

+0

Bonne réponse. C'est plus ou moins ce que j'avais conclu lorsque j'essayais de contourner ce problème. Je dois garder cela à l'esprit quand ce problème revient à nouveau. –

+0

Merci maintenant que j'ai relu ma réponse c'est un biit à dur mais je ne voulais pas être offensant. Je suis content que cela ait aidé. Bonne programmation! – guiman