Comment utiliser dynamiquement plusieurs bases de données pour un modèle dans CakePHP

Ok, ma première question a été modifiée de nombreuses fois que j'ai choisi de le supprimer et de reformuler ma question. J'ai fait un petit test du projet avec les différents modèle-noms pour trouver une solution à mon problème.

Avertissement: Ne pas mélanger la bases de données avec tables

Motivation: je me suis séparé de l'utilisateur des données dans plusieurs bases de données juridique & des problèmes de performances.

Actuellement, je travaille sur un CakePHP projet qui a de multiples User's et chaque User a sa propre base de données avec plusieurs tables (cars est l'un des tables). Maintenant, j'ai besoin d'expliquer quelque chose d'abord:

Chaque User a son propre base de données (pas une table, un base de données), de sorte que les noms de base de données sont comme suit.

  • [BASE de données] app (C'est l'application principale de la base de données)
    • [TABLE] users
    • [TABLE] permissions (Pas pertinent pour cette question)
  • [BASE de données] app_user1 (User.id 1 est propriétaire de l'ensemble de ce base de données)
    • [TABLE] cars (un table entièrement détenue par User.id 1)
  • [BASE de données] app_user2 (User.id 2 est propriétaire de l'ensemble de ce base de données)
    • [TABLE] cars (un table entièrement détenue par User.id 2)
  • etc...

J'ai fait un petit dessin qui pourrait clarifier la base de données /table -définitions et leurs relations avec les modèles:

Comment utiliser dynamiquement plusieurs bases de données pour un modèle dans CakePHP

Le problème!!!!!!

Je ne sais pas qui base de données connecter jusqu'à ce que le User connecte. User's et de leurs bases de données sont créés dynamiquement, donc je ne peux pas utiliser app/Config/database.php.

Je suis donc actuellement à la rédaction d'une extension sur le Model et ConnectionManager classes de contourner CakePHP de base de comportements de base de données. Ainsi, le Car modèle sait qui base de données à utiliser. Mais j'ai juste un sentiment que cela pourrait être fait plus facile!

Donc je suppose que tout cela se résume à une seule question:

Est-il un moyen plus facile de faire cela?!

Merci à toute personne qui prendra le temps et l'effort de la lecture et de la compréhension de mon problème!!!!

source d'informationauteur Ariaan