Php 在Symfony中将排序添加到子一对多筛选器

Php 在Symfony中将排序添加到子一对多筛选器,php,symfony,oop,doctrine-orm,Php,Symfony,Oop,Doctrine Orm,我已经把一个产品和它的子形象联系起来了。正常的一对多关联 通过以下代码,我获得对象中的子图像: $product->getImages(); 如果我想通过浏览图像来修改某些内容,我可以通过以下方式执行此操作: foreach ($product->getImages() as $Image) { // do something } 只有图像有一个名为seq的字段,这是一个表示图像顺序的数字。如何订购与序号相关的对象 谢谢 对此,您必须使用a

我已经把一个产品和它的子形象联系起来了。正常的一对多关联

通过以下代码,我获得对象中的子图像:

$product->getImages();
如果我想通过浏览图像来修改某些内容,我可以通过以下方式执行此操作:

foreach ($product->getImages() as $Image) {
            // do something
        }
只有图像有一个名为seq的字段,这是一个表示图像顺序的数字。如何订购与序号相关的对象


谢谢

对此,您必须使用annotation@orderBy。请使用类似

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

您可以在条令关系上添加注释(但这会影响您对集合的所有访问,并且您无法实现其他排序方法)您可以使用条令标准在产品实体本身中实现自定义过滤器(参见一些示例)

例如:

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 p M发布的解决方案很好

在symfony 3.4中,您应该做到这一点

/**
 * @ORM\OneToMany(targetEntity="Image")
 * @ORM\OrderBy({"seq" = "ASC"})
 **/
别忘了使用状态

use Doctrine\ORM\Mapping as ORM;
可能重复的