Je travaille sur une application développée en utilisant Zend Framework. J'ai défini des relations dans les modèles, et peut les utiliser avec bonheur, par exemple:Relations Zend Framework - Définition des noms de colonnes dans findManyToManyRowset()?
$rowset = $row->findManyToManyRowset('People', 'Jobs');
Cependant, je l'ai frappé un problème où l'ensemble de lignes est retourné a les noms de colonnes qui sont les mêmes dans les « gens » et « Emploi » , et donc, fusionne les clés de tableau, perdant certaines des données de l'ensemble de lignes final.
Je comprends que je peux passer un objet Zend_Db_Select
-findManyToManyRowset()
comme l'un des paramètres, mais ne peut trouver aucune documentation expliquant comment l'utiliser dans ce cas, par exemple:
$select = $this->select()->from(array(
'p' => 'people',
'j' => 'jobs'
),
array(
'person_id' => 'p.id',
'job_id' => 'j.id',
'person_code' => 'p.code',
'job_code' => 'j.code'
)
);
Si je tente d'utiliser le code ci-dessus, je reçois un message tel que:
Error: No reference rule "" from table People to table Jobs
Quelqu'un peut-il m'éclairer sur la façon dont cela devrait être fait? Je sais que je pourrais changer mes noms de colonnes dans la base de données, mais je préférerais un changement de code plutôt que de re-concevoir ma structure DB et de mettre à jour tout le code associé.
Note: sans une certaine forme d'aliasing colonne comme ci-dessus, le jeu de résultats retourné se présente comme suit (elle se confond les colonnes avec les mêmes noms.):
[_data:protected] => Array
(
[id] => 1
[code] => SX342
)
Cheers,
Matt
Merci pour la réponse Bill. Avez-vous des recommandations sur la façon dont les colonnes devraient être nommées, ou sur une échelle plus large, des recommandations pour de bons tutoriels sur les meilleures pratiques de conception de base de données? – fistameeny
Par exemple, vous pouvez utiliser "person_id" dans les deux tables, au lieu de "person_id" dans une table et "id" dans une autre table. Lorsque cela est possible, faites en sorte que les colonnes ayant le même contenu portent le même nom dans toutes les tables. De même "person_code" au lieu de simplement "code". Fondamentalement, faire des noms de colonnes distinctes à travers les tables, au moins quand il s'agit de tables susceptibles d'être jointes dans une requête. –
Lisez le premier chapitre de "Style de programmation SQL de Joe Celko pour Smarties". Google Livres inclut le chapitre un dans son aperçu en ligne: http://books.google.com/books?id=a9jtyioHfp8C –