32

このプロパティを持つエンティティ「コンテナ」があります

/**
 * @ORM\OneToMany(targetEntity="BizTV\ContentManagementBundle\Entity\Content", mappedBy="container")
 */
private $content;

プロパティは配列コレクションです...

public function __construct() {
    $this->content = new \Doctrine\Common\Collections\ArrayCollection();
}

...これらの 2 つの標準的な方法で

/**
 * Add content
 *
 * @param BizTV\ContentManagementBundle\Entity\Content $content
 */
public function addContent(\BizTV\ContentManagementBundle\Entity\Content $content)
{
    $this->content[] = $content;
}

/**
 * Get content
 *
 * @return Doctrine\Common\Collections\Collection 
 */
public function getContent()
{
    return $this->content;
}

今私の質問は、おそらく getContent() 呼び出しで、これにソート機能を組み込むスムーズな方法はありますか? 私は PHP の達人ではありませんし、symfony2 の経験もありませんが、学びながら学んでいきます。

コンテンツ エンティティ自体には、並べ替えたい次のような並べ替え INT があります。

/**
 * @var integer $sortOrder
 *
 * @ORM\Column(name="sort_order", type="integer")
 */
private $sortOrder; 
4

4 に答える 4

73

@ ORM \ OrderByステートメントを使用できるはずです。これにより、コレクションを並べ替える列を指定できます。

/**
 * @ORM\OneToMany(targetEntity="BizTV\ContentManagementBundle\Entity\Content", mappedBy="container")
 * @ORM\OrderBy({"sort_order" = "ASC"})
 */
private $content;

実際、これはOneToMany/ManyToOneのHowtoOrderByと重複している可能性があります

編集

実装のアドバイスを確認すると、@ ORM \ OrderByアノテーションが機能するためには、コレクションへの結合クエリを使用してテーブルをフェッチする必要があるようです:http ://www.krueckeberg.org/notes/d2.html

これは、コンテンツテーブルが結合されたコンテナを返すためにリポジトリにメソッドを作成する必要があることを意味します。

于 2013-01-11T16:07:57.087 に答える
23

現在のプロパティ値に基づいた順序でリレーションを常に取得したい場合は、次のようにすることができます。

$sort = new Criteria(null, ['Order' => Criteria::ASC]);
return $this->yourCollectionProperty->matching($sort);

たとえば、 Order プロパティを変更した場合に使用します。「最終更新日」にも最適です。

于 2015-05-05T13:25:53.863 に答える