繁体   English   中英

在Symfony中为子一对多过滤器添加排序

[英]Add sort to child one-to-many filter in Symfony

我已将产品与其子图像建立了关系。 正常的一对多关联。

使用以下代码,我在对象中获取子图像:

$product->getImages();

我想通过图像来修改某些内容,我这样做:

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

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

谢谢!

你必须为此使用注释@orderBy。 请使用类似的东西

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

您可以在Doctrine关系上添加注释(但这会影响您对集合所做的所有访问,并且您无法实现其他排序方法), 或者您可以使用Doctrine Criteria在Product Entity本身中实现自定义过滤器(请参阅这里有一些例子)。

例如:

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

在symfony 3.4中你应该成功

/**
 * @ORM\OneToMany(targetEntity="Image")
 * @ORM\OrderBy({"seq" = "ASC"})
 **/

并且不要忘记使用声明

use Doctrine\ORM\Mapping as ORM;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM