2016-06-28 2 views
1

Collections et On-Demand Hydratation
L'avantage d'utiliser une collection au lieu d'un tableau est que Propel peut hydrater les objets du modèle à la demande. En utilisant cette fonctionnalité, vous ne manquerez jamais de mémoire lorsque vous récupérez un grand nombre de résultats. Disponible par la méthode du modèle des requêtes, l'hydratation à la demande setFormatter() est très facile à déclencher:quelle est la différence entre collection et array en php (propel)?

<?php 
$authors = AuthorQuery::create() 
    ->limit(50000) 
    ->setFormatter(ModelCriteria::FORMAT_ON_DEMAND) 
    ->find(); 

foreach ($authors as $author) { 
    echo $author->getFirstName(); 
} 

1) Quel est le sens de « Hydratation » ici?
2) quelle est la différence entre collection et array?

Source: Propel @1.6

Répondre

2

1.Hidration

Un moyen pour améliorer les performances par "remplissage" de votre classe/objet avec les données de la ligne juste au moment où vous en avez besoin.

Au lieu de faire "SELECT * FROM SomeTable" d'une très grande table, Propel d'abord le feu au large "SELECT ID FROM SomeTable", puis à l'intérieur de la boucle, puis faire "SELECT [COLUMS] FROM SomeTable WHERE ID=[CurrentID]", donc "à la demande"

2. Collection vs tableau tableau est juste le tableau normal, alors qu'un PropelCollection est un objet d'objets, qui a beaucoup de choses disponibles telles que:

  • Paging résultats
  • Vérification de od d ou même, ->isOdd(), etc.
  • Vérification du nombre d'éléments qu'il $object->count()
  • Format conversion ->toYAML(), ->toCSV(), ->toXML()

Chaque élément de la collection est un PropelObject, de sorte que vous pouvez toujours récupérer les données avec ->getColumn() dans votre boucle. Documentation