2010-08-26 10 views
4

Existe-t-il une meilleure pratique pour obtenir des données à partir de plusieurs tables de base de données en utilisant Zend? Je voudrais savoir plutôt que de finir par vouloir refactoriser le code que j'écris dans un proche avenir. Je lisais la documentation Zend et il dit:..Récupérer des données de plusieurs tables lors de l'utilisation du framework Zend?

« Vous ne pouvez pas spécifier de colonnes JOINtes à retourner dans une rangée/rowset Cela déclenchera une erreur de PHP Cela a été fait pour garantir l'intégrité de Zend_Db_Table est conservée, c'est-à-dire qu'un Zend_Db_Table_Row ne doit référencer que les colonnes dérivées de sa table parent. "

Je suppose donc que j'ai besoin d'utiliser plusieurs modèles - est-ce correct? Si, par exemple, je veux sortir toutes les commandes pour un identifiant d'utilisateur particulier où la date est entre deux dates que ferais-je?

Je sais qu'il serait possible d'accéder aux deux modèles différents à partir d'un contrôleur, puis de combiner leurs données respectives dans l'action, mais je ne serais pas heureux de le faire depuis que j'ai lu survivethedeepend.com et it tells me that I shouldn't do this ...

Où, pourquoi et comment? :)

Merci!

Répondre

1

Arrêtez de penser à Zend_Db_Table comme votre "modèle". Vous devez écrire vos propres classes de modèle, riches et centrées sur le domaine, entre vos contrôleurs (et vues) et votre logique de persistance (tout ce qui utilise Zend_Db/Zend_Db_Table/Zend_Db_Select) pour charger/stocker des données depuis la base de données.

+0

suggérez-vous que le modèle aurait accès à d'autres classes qui sont étendues de Zend_Db_Table_Abstract? – olive

+0

@Ihnz non, il suggère que le modèle est votre application, tandis que vos contrôleurs et vues sont juste une interface à elle. – Gordon

+1

@lhnz - en fait, oui, mais tout ce que Gordon vient de dire est vrai aussi. Vous pourriez avoir des classes de persistance/mappage de données que vos classes de modèles plus centrées sur les domaines utilisent, mais votre modèle devrait être * plus * que juste une abstraction de base de données. Si vous utilisez des classes qui étendent Zend_Db_anything directement dans vos contrôleurs, c'est un gros drapeau rouge dont vous avez besoin pour créer un modèle plus riche. – timdev