comment trier la collection de tableaux d'une entité en symfony2
j'ai une entité "conteneur" avec cette propriété
/**
* @ORMOneToMany(targetEntity="BizTVContentManagementBundleEntityContent", mappedBy="container")
*/
private $content;
la propriété est une collection de tableaux...
public function __construct() {
$this->content = new DoctrineCommonCollectionsArrayCollection();
}
...avec ces deux méthodes standard
/**
* Add content
*
* @param BizTVContentManagementBundleEntityContent $content
*/
public function addContent(BizTVContentManagementBundleEntityContent $content)
{
$this->content[] = $content;
}
/**
* Get content
*
* @return DoctrineCommonCollectionsCollection
*/
public function getContent()
{
return $this->content;
}
maintenant, ma question Est, est-ce qu'il y a une façon douce de construire une fonction de tri dans ceci, peut-être sur l'appel getContent ()? Je ne suis pas PHP wiz et certainement pas assaisonné en symfony2 mais j'apprends au fur et à mesure.
l'entité de contenu elle-même a un tri INT comme celui-ci que je veux trier sur:
/**
* @var integer $sortOrder
*
* @ORMColumn(name="sort_order", type="integer")
*/
private $sortOrder;
3 réponses
vous devriez pouvoir utiliser la déclaration @ORM\OrderBy qui vous permet de spécifier des colonnes pour commander des collections sur:
/**
* @ORM\OneToMany(targetEntity="BizTV\ContentManagementBundle\Entity\Content", mappedBy="container")
* @ORM\OrderBy({"sort_order" = "ASC"})
*/
private $content;
en fait, il peut s'agir d'un duplicata de How to OrderBy on on OneToMany/ManyToOne
Modifier
vérification des conseils de mise en œuvre il semble que vous devez récupérer les tables avec une requête de jointure à la collection afin de la @ORM\OrderBy annotation au travail: http://www.krueckeberg.org/notes/d2.html
cela signifie que vous devez écrire une méthode dans le dépôt pour retourner le conteneur avec la table des matières jointe.
si vous voulez être sûr que vous obtenez toujours vos relations dans l'ordre basé sur les valeurs de propriété actuelles, vous pouvez faire quelque chose comme ceci:
$sort = new Criteria(null, ['Order' => Criteria::ASC]);
return $this->yourCollectionProperty->matching($sort);
utilisez cela par exemple si vous avez changé la propriété Order. Ça marche très bien pour une" dernière date modifiée " aussi.
vous pouvez écrire
@ORM\OrderBy({"date" = "ASC", "time" = "ASC"})
pour la commande à critères multiples.