Symfony2:对ArrayCollection进行排序

时间:2013-07-21 23:05:31

标签: php symfony doctrine-orm

根据this,应该使用OrderBy对ArrayCollection进行排序。在列出一个家庭的联系日期集合时,以下某些方法无法实现此结果:

家庭实体(摘要)

/**
 * @var \Doctrine\Common\Collections\Collection
 *
 * @ORM\OneToMany(targetEntity="Mana\ClientBundle\Entity\Contact", mappedBy="household")
 * @ORM\OrderBy({"contact_date" = "DESC"})
 */
private $contacts;

联络实体(摘录)

    /**
     * Contact
     *
     * @ORM\Table(name="contact", indexes={@ORM\Index(name="idx_contact_household_idx", columns={"household_id"}), @ORM\Index(name="idx_contact_type_idx", columns={"contact_type_id"}), @ORM\Index(name="idx_contact_center_idx", columns={"center_id"})})
     * @ORM\Entity
     */
    class Contact
    {
        /**
         * @var integer
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="IDENTITY")
         */
        private $id;

        /**
         * @var \DateTime
         *
         * @ORM\Column(name="contact_date", type="date", nullable=true)
         */
        private $contactDate;
        ...
    }

模板(最近5个?)(摘录)

{% for i in 0..4 %}
{% if household.contacts[i] is defined %}
<tr><td>{{ household.contacts[i].contactDate|date('m/d/Y') }}</td>
...{% endif %}
{% endfor %}

样本结果

Date    
05/02/2012
05/23/2012
05/30/2012
06/26/2012
06/06/2012

1 个答案:

答案 0 :(得分:1)

您在字段名称中的问题。正如我可以看到您的联系实体,您的字段被命名为$contactField Houshold 实体中的@ORM\OrderBy({"contact_date" = "DESC"})使用列名而不是字段名称。我认为,如果您将contact_date更改为contactDate,它将有效。

非常奇怪的是,Doctrine对此问题没有任何错误。因为Doctrine通常使用字段而不是列。