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; 
26
demandé sur Matt Welander 2013-01-11 19:52:06

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.

57
répondu Luke 2017-05-23 11:33:26

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.

17
répondu Wouter Van Vliet 2018-03-14 03:29:32

vous pouvez écrire

@ORM\OrderBy({"date" = "ASC", "time" = "ASC"})

pour la commande à critères multiples.

12
répondu Yasmany Hernandez Hernandez 2016-05-12 19:28:30