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;
可能重复的