2010-12-08 3 views
0

J'ai deux tables (qui se trouvent dans deux bases de données différentes). "clients" et "domaines", les clients peuvent avoir plusieurs domaines.Choix des noms de champs lors de la recherche des résultats de deux tables

C'est le code que je utilise:

$this->Domain->find('all', array(
    'order' => 'domain ASC', 
    'fields' => array(
     'Domain.id', 
     'Domain.domain', 
     'Server.name', 
     'Client.id', 
     'Client.name' 
    ) 
)); 

Quand je reviens tous les champs de ne pas utiliser le tableau de = 'champs>() tout fonctionne bien, dès que je demande pour des domaines spécifiques, il dit:

SQL Error: 1054: Unknown column 'Client.id' in 'field list'

Tout fonctionne aussi bien si je supprime simplement les deux colonnes du client (le modèle client est le seul modèle qui est sur une autre base de données

Répondre

0

Si les clients.domaines, donc vos modèles doivent être appelés comme $this->Domain->find('all'); explicitement les champs de passage Client.id va montrer l'erreur, car ce n'est pas la partie de la table des domaines, activer SQL dumping en utilisant debug=2 et voir comment les requêtes sont en cours d'exécution.

modèles Vous devriez être

// in client.php model - having structure - id, name 
$hasMany = 'Domain'; 

// in domain.php model - having structure - id, name, client_id 
$belongsTo = 'Client'; 

Cela devrait fonctionner comme ça

$this->Domain->recursive = 1; 
$data = $this->Domain->find('all'); 
// $data = Array ('Domain' => ********, 'Client' => ******) 
+0

Il affirme que ses deux tables (domaines et clients) sont dans des bases de données distinctes - Je pense que son problème est d'essayer de couvrir différentes dbs. –

+0

Mais cela me permet d'utiliser la colonne "Server.name" qui fait partie d'une table différente? – 472084

0

Si vos deux tables sont dans différentes bases de données, vous êtes vraiment rendre votre vie difficile. AFAIK, Cake ne supporte pas de joindre deux tables (ou d'imposer des relations) entre deux bases de données différentes. Pourquoi avez-vous la table de client dans un DB séparé? Si vous ne pouvez pas déplacer votre table, je pense que vous devrez écrire du code personnalisé dans votre modèle de domaine, afin qu'il utilise la chaîne de connexion db (par défaut) pour les domaines, mais instanciera et connectez une autre ressource db à l'autre base de données. Voir http://bakery.cakephp.org/articles/doze/2010/03/12/use-multiple-databases-in-one-app-based-on-requested-url pour savoir comment procéder - passez à la section intitulée «Sélectionner une base de données dynamique de manière dynamique».

HTH, Travis

+0

Je les ai dans une autre base de données parce que je les empruntant d'un autre site Web et je ne veux pas de duplication. J'ai réussi à obtenir plusieurs bases de données pour fonctionner correctement en utilisant: var $ useDbConfig = 'anotherdb'; – 472084

+0

Oui, mais je ne pense pas que vous puissiez changer la variable dbConfig au milieu d'une requête, n'est-ce pas? Il semble que vous aurez toujours besoin de créer une méthode de recherche personnalisée. –

+0

Une autre idée serait de créer un déclencheur sur l'autre table de base de données. Sur un create/update/delete, déclenchez-le pour refléter les données dans l'autre db. –

Questions connexes