【问题标题】:Symfony form collection OrderBy a fields from OneToMany relation from a ManyToOneSymfony 表单集合 OrderBy 来自 OneToMany 关系的字段来自 ManyToOne
【发布时间】:2015-10-30 14:37:16
【问题描述】:

有点棘手:

我有一个实体Street 的表单集合。 集合项目是houses。我需要通过room订购收藏中的房子

我曾尝试添加@ORM\OrderBy({"room" = "ASC"}),但显然没有指定房间实体内的权重字段,集合就无法知道。

我正在尝试做的事情是否可能?

Street.php

/**
 * @var ArrayCollection
 *
 * @ORM\OneToMany(targetEntity="houses", mappedBy="street")
 */
protected $houses;

Houses.php

/**
 * @var Room
 *
 * @ORM\ManyToOne(targetEntity="Room", inversedBy="house")
 * @ORM\JoinColumn(name="room_id", referencedColumnName="id")
 */
private $room;

/**
 * @var Street
 *
 * @ORM\ManyToOne(targetEntity="Street", inversedBy="houses")
 * @ORM\JoinColumn(name="street_id", referencedColumnName="id")
 */
private $street;

HouseCollectionType.php

 $builder
        ->add('houses', 'collection', array(
            'type'          => new HouseFieldsType(),
            'allow_delete'  => false,
        ))
    ;

 public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
    $resolver->setDefaults(array(
        'data_class' => 'Bundle/Street'
    ));
    }

【问题讨论】:

  • 也许this post 会有所帮助。
  • 感谢@chapay,您提供的帖子中的解决方案非常有帮助,我的问题是我需要它与表单集合一起使用,以便它可以自动执行 setter 和 getter。

标签: symfony symfony-forms


【解决方案1】:

我不知道这是否是正确的方法,但它就是这样:

Street.php

public function getHouses()
{
    $orderedHouse = array();
    /** @var House $house */
    foreach($this->houses as $house) {
        $orderedHouses[$house->getRoom()->getWeight()] = $house;
        $this->houses->removeElement($house);
    }
    ksort($orderedHouses);
    foreach($orderedHouses as $house) {
        $this->houses->add($house);
    }
    return $this->houses;
}

【讨论】:

  • 如果您可以提供带有负面的反馈,因为没有反馈的负面对解决方案没有帮助,这将非常有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多