2016-09-22 42 views
3

我在产品和其子图像之间建立了关系。一个正常的一对多关联。在Symfony中为儿童一对多过滤器添加排序

用下面的代码我得到的子图像中的对象:

$product->getImages(); 

的我想通过图像步行到修改的东西,我这样做有:

foreach ($product->getImages() as $Image) { 
      // do something 
     } 

只有图像有一个名为seq的字段。什么是代表图像顺序的数字。我如何订购与seq编号相关的对象?

谢谢!

+1

[ “usort” 学说\ COMMON \收藏的可能的复制\ ArrayCollection的?](http://stackoverflow.com/questions/16705425/usort-a-doctrine-common-collections-arraycollection) – jcroll

回答

3

您必须为此使用注释@orderBy。请使用类似

<?php 
/** @Entity **/ 
class Product 
{ 
    /** 
    * @OneToMany(targetEntity="Image") 
    * @OrderBy({"seq" = "ASC"}) 
    **/ 
    private $images; 
} 
0

你可以在教义关系添加批注(但这对您对集合中的所有接入影响,你不能执行另一排序方法)可以实现使用学说标准(参见一些示例here)在产品实体本身中的自定义过滤器。

如例:

class Product 
{ 
    /** 
    * @OneToMany(targetEntity="Image") 
    **/ 
    private $images; 

public function __construct() 
{ 
    $this->images = new ArrayCollection(); 
} 

public function getSortedImages() 
{ 
    $expr = Criteria::expr(); 

    $criteria = Criteria::create() 
     ->where($expr->neq('seq', null)) // Analog to IS NOT NULL 
     ->orderBy(array('seq'=>'DESC')); 

    return $this->images->matching($criteria); 
} 

} 

希望这有助于

对于简单的情况下发表@Liju PM的解决方案是好的