2015-10-30 54 views
2

一個棘手的一點:Symfony的形式收集排序依據從一對多關係的領域從多對一

我有一個表格集合實體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' 
    )); 
    } 
+1

也許[此帖](https://stackoverflow.com/questions/22828669/ordering-doctrine-collection-based-on-associated-entity-when-it-is-not-possible)將幫助。 – chapay

+0

謝謝@chapay,您提供的帖子上的解決方案非常有幫助,問題與我的問題是我需要它與表單集合一起工作,因此它可以自動執行setter和getter。 – user742736

回答

-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; 
} 
+0

如果您可以提供負面反饋作爲否定反饋而不反饋不會有助於解決方案將會非常有幫助 – user742736