2010-09-01 5 views
0

Est-il possible d'exécuter une requête SQL (Zend_Db_Select) sur un objet Zend_Db_Table_Row? Que diriez-vous de joindre deux objets Zend_Db_Table_Row?Comment interroger un Zend_Db_Table_Row

Je sais que cela semble un peu retardé, mais je suis en train de traiter des centaines et des milliers de lignes. J'ai déjà l'objet ligne que je manipule, donc je ne veux plus interroger la base de données.

J'espère que c'est clair. Si non, veuillez me demander de clarifier.

Edit:

Pour clarifier les choses, les objets sont en mémoire. Je les ai déjà récupérés de la base de données.

La raison est:

Il y a des milliers d'enregistrements dans une table « log ». Je dois réagir à ceux-ci en fonction de plusieurs critères définis par l'utilisateur. Le temps est important lors du traitement de ces journaux. Là pour un nouveau processus est fourchue pour que cela se produise en temps opportun. Un nouveau processus est forké pour chaque journal. Par conséquent, les objets existent déjà en mémoire.

+0

Aidez-nous à vous aider en postant quel code vous avez encore. Très difficile de deviner ce dont vous avez besoin. – Iznogood

+0

Voici le code que j'ai: myfunction ($ obj1, $ obj2) { print_r ($ obj1); print_r ($ obj2); } Comme ça va aider. J'ai deux objets Zend_Db_Table_Row - en mémoire. C'est tout. Je veux interroger les deux objets. Si ce n'est pas possible, je devrais juste -> toArray() et utiliser un tas d'instructions if. Yuck ... –

+0

Êtes-vous familier avec 'JOIN's? Il serait utile si vous avez posté votre code et la structure de votre base de données. –

Répondre

0

Les Zend_Db_Table_Row objets que vous avez sont rangées, ils ne peuvent pas être interrogés car ils ne sont plus dans la base de données, ils sont en mémoire dans le cadre de la ZF. Ils sont un ensemble de données en mémoire traitées par PHP - ils n'ont plus rien à voir avec la base de données, donc ils ne peuvent pas être interrogés comme vous le suggérez.

Vous devez utiliser findDependentRowset() dans vos modèles ou Zend_Db_Table classe pour définir les relations entre les tables, ZF gravera joindre des déclarations pour vous JOIN tables ensemble, les données jointes seront alors dans vos Zend_Db_Table_Row objets une fois que vous interrogez le datbase.

Ou vous pouvez utiliser join() comme détaillé here à JOIN deux ou plusieurs tables ensemble. Vous devez effectuer les jointures sur l'objet select que vous interrogez. Vous devez utiliser la puissance du moteur de base de données pour obtenir les données dont vous avez besoin. Faire cela en PHP est beaucoup plus lent que d'utiliser la base de données.

+0

Voilà la réponse que je cherchais. Vous ne pouvez pas interroger un objet Zend_Db_Table_Row. Je pensais qu'il pourrait y avoir un certain mécanisme de Zend dandy pour faire cela en regardant l'objet Zend_Db_Table_Row. Je suppose que c'était un vœu pieux. L'objet est déjà en mémoire. Je ne vais plus interroger la base de données. Je suis déjà allé de l'avant avec la structure si alambiquée. Ce n'est pas trop mal - 5 si les déclarations. –

1

Envisager de définir les relations et appelant findDependentRowset() sur l'objet Row:

http://framework.zend.com/manual/en/zend.db.table.relationships.html

+0

J'ai déjà les objets en mémoire. Serai-je capable de faire une requête contre eux? –

+1

En supposant que vous pouvez définir les relations dans vos classes Zend_Db_Table et les récupérer en mémoire, yup. – Tim

+0

Et comment ferais-je cela? $ rowobj-> fetchRow ($ select); ? –

Questions connexes