2015-10-29 59 views
2

我與Symfony2和奏鳴曲管理員一起工作。我有一個實體(新聞),它擁有一個子類別。每個子類別都擁有一個類別,而每個類別都擁有一個類別。 在新聞的添加頁面中,我有一個子類別列表,用於選擇我的子類別以鏈接到我的新聞。我選擇的每一項都格式化這樣的:Symfony2 Sonata Project帶有OneToMany實體的sonata_type_model排序

enter image description here

<li> subcategory (category'affaire) > categoryName </li>. 

我想通過AFFAIRE(ASC)的字段進行排序。

這裏是我的formfield定義:

protected function configureFormFields(FormMapper $formMapper) 
    { 
     $formMapper 
      ->add('subCategory', 'sonata_type_model', array("label" => "Catégorie/Sous Catégorie", "btn_add" => false)); 
} 

一個新聞擁有一個子目錄

一個子目錄自己的一個類別

一類擁有一個AFFAIRE。

我嘗試添加類似:

->add('subCategory', 'sonata_type_model', 
      array("label" => "Sub Category", 
        "btn_add" => false 
      ), 
      array(
       'sortable'  => 'ordering', 
       'label'   => 'subcategory.category.affaire.code', 
      )) 

但沒有什麼變化。有任何想法嗎 ?

分類實體:

class NewsCategory 
{ 
    /** 
    * @var \My\Custom\Foo\Entity\Affaire 
    * 
    * @ORM\ManyToOne(targetEntity="\My\Custom\Foo\Entity\Affaire") 
    * @ORM\JoinColumn(name="affaire_code", referencedColumnName="code") 
    */ 
    private $affaire; 

- 子目錄實體:

class NewsSubCategory 
{ 
    /** 
    * @var \My\Custom\Foo\Entity\NewsCategory 
    * 
    * @ORM\ManyToOne(targetEntity="\My\Custom\Foo\Entity\NewsCategory") 
    * @ORM\JoinColumn(name="category_ref", referencedColumnName="id") 
    * 
    */ 
    private $category; 

- 新聞單位:

class News 
{ 
    /** 
    * @var \My\Custom\Foo\Entity\NewsSubCategory 
    * 
    * @ORM\ManyToOne(targetEntity="\My\Custom\Foo\Entity\NewsSubCategory") 
    * @ORM\JoinColumn(name="sub_category", referencedColumnName="id") 
    */ 
    private $subCategory; 

[編輯]:

我試過

->add('subCategory', 'sonata_type_model',array("label" => "Catégorie/Sous Catégorie","btn_add" => false), array("sortable" => "ordering")) 

而且我沒有犯錯,但沒有發生任何事情。我不明白的地方,我可以添加選項(orderBy => 'Affaire'),或者它已做這樣...

[EDIT2]:

我甚至嘗試:

->add('subCategory.category.affaire', null, 
        array("label" => "Catégorie/Sous Catégorie", 
          "btn_add" => false 
        )) 

回答

2

我不知道你怎麼能做到這一點與sonata_type_model,但你可以改變你的字段的類型null或實體(空設置的默認類型),並添加一個query_builder選項,以適應使用的查詢:

->add('subcategory', null, array(
    'query_builder' => function(EntityRepository $er) { 
     return $er->createQueryBuilder('sc') 
      ->leftjoin('sc.category', 'c') 
      ->orderBy('c.affaire', 'ASC'); 
    } 
)) 

如果不是空你選擇的實體,您要添加的類別也:

->add('subcategory', 'entity', array(
    'class' => 'MyCustomFooBundle:Subcategory', 
    'query_builder' => function(EntityRepository $er) { 
     return $er->createQueryBuilder('sc') 
      ->leftjoin('sc.category', 'c') 
      ->orderBy('c.affaire', 'ASC'); 
    } 
)) 
+0

好主意。我不知道你能做到。 Merci! – Gauthier

1

似乎'可排序'必須在第三個參數中。

->add('subCategory', 'sonata_type_model', 
     array("label" => "Sub Category", 
       "btn_add" => false 
       'sortable'  => 'ordering', 
     )) 

在這之後,你有兩個選擇:試圖展示AFFAIRE

->add('subCategory.categorie.affaire', 'sonata_type_model', 
     array("label" => "Affaire", 
       "btn_add" => false 
       'sortable'  => 'ordering', 
     )) 

還是我們的實體可以實現「集合可排序」。嘗試看看到:https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/sortable.md

(對不起,我的英語不流利)

+0

問題是我在第三個參數中出現'sortable'=>'ordering'的錯誤,而我沒有權限添加庫。 – Gauthier

+0

這裏是我的代碼:''' - >添加( '登記', 'sonata_type_model',陣列( '標籤'=> 'jdr_admin_log_registries', '排序'=> '排序'))'''Saonata的 哪個版本管理員安裝了嗎?我正在使用「sonata-project/admin-bundle」:「^ 2.3」。 你能編輯你的實體嗎? –

+0

我覺得我在小於2.3(2.1或2.2)。這裏是添加函數pathern:'公共函數添加($ name,$ type = null,array $ options = array(),array $ fieldDescriptionOptions = array())' – Gauthier

相關問題