Je travaille avec des objets Entity à partir de requêtes Doctrine et je me retrouve avec un très grand tableau, avec toutes les informations de toutes les entités liées. Cela finit par être un énorme arbre de données ... comment puis-je limiter cela? Évitez d'énumérer toutes les données de toutes les relations?Doctrine/Symfony 2: Entités avec trop de relations
Répondre
Vous pouvez toujours supprimer les associations inutiles (il s'agit d'une bonne pratique pour accélérer Doctrine). Vous pouvez également sélectionner uniquement les champs que vous avez besoin dans votre couche de présentation (en lecture seule des données):
public function getAll()
{
$qb = $this->createQueryBuilder('u'); // Where are in User custom repository
return $qb
->select(array('u.id', 'u.first', 'u.last'))
->getQuery()
->getResult();
}
Si vous avez besoin de travailler avec des objets (ou pour les requêtes complexes, qui nécessite SQL ordinaire) une possibilité Filling seulement les propriétés nécessaires (et éventuellement, les associations/collections imbriquées) de votre objet domaine.
Un exemple, plus sur native SQL: (?)
public function getAll()
{
$mapping = new \Doctrine\ORM\Query\ResultSetMapping();
$mapping->addEntityResult('Acme\HelloBundle\User', 'e');
$mapping->addFieldResult('e', 'id', 'id');
$mapping->addFieldResult('e', 'first', 'first');
$mapping->addFieldResult('e', 'last', 'last');
$sql = "SELECT id, first, last FROM user ";
$result = $this->_em->createNativeQuery($sql, $mapping)->getResult();
// Or hust return $result itself (array)
return new \Doctrine\Common\Collections\ArrayCollection($result);
}
Bien sûr, le disadvance est l'utilisation de SQL natif. Je ne crois pas que ResultSetMapping
peut être utilisé avec DQL.
EDIT: jetez un oeil à http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/best-practices.html
Je cherche un moyen simple de désactiver le chargement paresseux dans Doctrine, ou, obtenir une profondeur maximale de relation. C'est possible? – vinnylinux
@vinnylinux si je le rappelle correctement, le chargement paresseux est quand vous sélectionnez un sous-ensemble de données et puis, lors de l'accès aux propriétés ou associations non chargées, doctrine chargera (à une requête supplémentaire) toutes les données pour vous. Donc, le chargement paresseux est une bonne chose. Comme je l'ai dit, cela dépend. À quoi servent les données? – gremo
Ce n'est certainement pas une bonne chose quand vous sérialisez des données avec quelque chose comme le bundle JMSSerializer. Testez-vous avec un ensemble de données raisonnablement volumineux avec diverses relations. Ça commence à se répéter. – vinnylinux
- 1. Doctrine 2 entités avec un à plusieurs relations
- 2. Relations entre entités
- 3. EF plusieurs relations entre entités
- 4. MySQL Query Join 2 tables avec 2 tables de relations
- 5. Doctrine 2 - Impossible de supprimer en cascade les entités avec des relations bidirectionnelles
- 6. de base de données - Relations avec les entités différentes
- 7. fetchedResultsController de 2 entités
- 8. rails: has_many avec 2 champs de relations
- 9. entités de relations et la mise ONEtoONE
- 10. Requête Linq avec 2 relations plusieurs à plusieurs
- 11. NSPredicate retourner uniquement les entités avec connecté avec d'autres entités dans une à plusieurs relations
- 12. $ _referenceMap Les relations avec Zend_Db_Table_Abstract créent trop de requêtes
- 13. Comparer 2 Entités
- 14. Entités et relations dans le CRM
- 15. Relations entre les entités JPA et Netbeans
- 16. Comment implémenter des entités JPA polymorphes avec des relations génériques
- 17. CakePHP trouver avec 2 relations HABTM
- 18. updateAll avec relations dans CakePHP 2
- 19. MVC + Entités Framework: plusieurs à plusieurs relations
- 20. Besoin d'aide avec Doctrine 2 Relations (inversedBy)
- 21. Créer 2 entités différentes avec la même forme Symfony 2
- 22. HABTM 2 tables 2 relations différentes
- 23. Quoi de mieux pour construire NSPredicate avec trop de relations profondes?
- 24. Symfony 2 & Doctrine 2: Relation complexe entre entités
- 25. entités ayant des relations dans Comparaison des données de base
- 26. Comment effectuer une recherche sur plusieurs entités avec Symfony 2
- 27. DDD, entités apparentées dans les relations de détail maître
- 28. Visualisation des entités et des relations de données de base
- 29. Constantes dans Doctrine 2 entités
- 30. Comment accéder aux entités de plusieurs à plusieurs relations
Je ne sais pas si ça aide, mais vous pouvez essayer de faire '-> getResult (Doctrine \ ORM \ query :: HYDRATE_ARRAY)' à la fin d'une requête , les résultats seront retournés sous la forme d'un tableau – Gigala