[英]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.