2015-10-29 1 views
2

Я работаю с Symfony2 и sonata admin. У меня есть сущность (Новости), которая владеет подкатегорией. Каждая подкатегория принадлежит одной категории, и каждая категория принадлежит одному Affaire. На странице добавления новостей у меня есть список подкатегорий, чтобы выбрать мою подкатегорию, чтобы ссылаться на мои новости. Каждый элемент моего выбора отформатированный как это:Symfony2 Sonata Project sonata_type_model с объектом OneToMany sortby

enter image description here

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

Я хотел бы отсортировать поля по AFFAIRE (ASC).

Вот мое определение поля формы:

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

One News принадлежит один подкатегории

Одна категория принадлежит к одной категории

Одна категория принадлежат один 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; 

[EDIT]:

Я пробовал

->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, но вы можете изменить тип вашего поля к нуль или юридическое лицо (нулевой установить тип по умолчанию) и добавить опцию 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

Отличная идея. Я не знал, что ты сможешь это сделать. Мерси! – Gauthier

1

кажется что «Сортировка» должна была быть в третьем параметре.

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

И после этого, у вас есть два варианта: Попытка показать Любовники

->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

Вот мой код: '' '-> add ('registries', 'sonata_type_model', array ('label' => 'jdr_admin_log_registries', 'sortable' => 'ordering'))' '' Какая версия Saonata Admin вы установили? Я использую «sonata-project/admin-bundle»: «^ 2.3». Можете ли вы изменить свою сущность? –

+0

Я думаю, что у меня меньше 2.3 (2.1, или 2.2). Вот функция добавления pathern: 'public function add ($ name, $ type = null, array $ options = array(), array $ fieldDescriptionOptions = array())' – Gauthier

 Смежные вопросы

  • Нет связанных вопросов^_^