2015-07-16 1 views
1

Я использую Symfony 2.7 и KitpagesDataGridBundleSymfony2/KitpagesDataGridBundle объекты манипуляции

Я разрабатываю приложение для школы, в которой у меня есть два объекта с соотношением 1-N: Раздел-курсы.

Вот две сущности:

Раздел

/** 
* @var integer 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
private $id; 

/** 
* @var string 
* 
* @ORM\Column(name="name", type="string", length=255, nullable=false) 
*/ 
private $name; 

/** 
* @ORM\OneToMany(targetEntity="my\SiteBundle\Entity\Course", mappedBy="section", cascade={"persist"}) 
*/ 
private $courses; 

курс

/** 
* @var integer 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
private $id; 

/** 
* @var string 
* 
* @ORM\Column(name="name", type="string", length=255) 
*/ 
private $name; 

/** 
* @ORM\ManyToOne(targetEntity="my\SiteBundle\Entity\Section", inversedBy="courses") 
* @ORM\JoinColumn(nullable=false) 
*/ 
private $section; 

Теперь, я хотел бы иметь возможность получить связанный 'курс' объекты из секции и перебирать их в шаблоне Twig. На данный момент, поскольку я не смог этого сделать, я создал прототип, который объединит имена курсов и идентификаторы в виде строки в репозитории раздела с помощью построителя запросов, а затем проанализирует эти конкатенации в шаблоне Twig как например:

SectionRepository

/** 
* @return \Doctrine\ORM\QueryBuilder 
*/ 
public function getGridQueryBuilder() 
{ 
    $qb = $this->createQueryBuilder('s'); 
    $qb 
     ->select('s, GroupConcat(c.name SEPARATOR \'|\') as courses, GroupConcat(c.id SEPARATOR \'|\') as coursesID') 
     ->leftJoin('s.courses', 'c') 
     ->groupBy('s.id') 
     ->orderBy('s.name'); 

    return $qb; 
} 

SectionController

(поле "пустышки [CoursesNames] позволяет мне выполнить поиск по названиям курсов)

public function indexAction(Request $request) 
{ 
    $qb = $this->getRepository('mySiteBundle:Section')->getGridQueryBuilder(); 

    // Grid config 
    $gridConfig = new GridConfig(); 
    $gridConfig 
     ->setName('sectionsList') 
     ->setQueryBuilder($qb) 
     ->setCountFieldName('s.id') 
     ->addField(new Field('s.name',['label'=>'Section name', 'filterable'=>true])) 
     ->addField(new Field('c.name', ['label'=>'Dummy[CoursesNames]', 'filterable'=>true, 'visible'=>false])); 

    // Paginator config 
    $this->setGridPaginator($gridConfig, 5); 

    return $this->render('mySiteBundle:Section:index.html.twig', ['grid' => $this->getGrid($gridConfig, $request)]); 
} 

Раздел шаблон Twig

То, что я в настоящее время:

{% embed kitpages_data_grid.grid.default_twig with {'grid': grid} %} 

{% block kit_grid_thead_column %} 
    <th>Courses list</th> 
{% endblock %} 

{% block kit_grid_tbody_column %} 
    {% set courses = item['courses']|split('|') %} 
    {% set coursesID = item['coursesID']|split('|') %} 

    <!-- Courses --> 
    <td> 
     {% for course in courses %} 
      {% if not course is empty %} 
       <a href="{{ path ("viewCourse", {"id": coursesID[loop.index0] }) }}" ><span class="label label-primary">{{ course }}</span></a> 
      {% else %} 
       (No results) 
      {% endif %} 

     {% endfor %} 
    </td> 

{% endblock %} 

{% endembed %} 

То, что я хотел бы быть в состоянии сделать:

{% embed kitpages_data_grid.grid.default_twig with {'grid': grid} %} 

{% block kit_grid_thead_column %} 
    <th>Courses list</th> 
{% endblock %} 

{% block kit_grid_tbody_column %} 

    <!-- Courses --> 
    <td> 

     {# here using section object #} 

     {% for course in section.courses %} 
      <a href="{{ path ("viewCourse", {"id": course.id }) }}" ><span class="label label-primary">{{ course.name }}</span></a> 
     {% endfor %} 
    </td> 

{% endblock %} 

{% endembed %} 

Даже если мой прототип работы ну, мне совсем не нравится разбор, и я бы предпочел работать с объектами раздела ,

Я пытался сделать что-то вроде

{{ item['s'].name }} 

в шаблоне, но я получил сообщение об ошибке: Key «s» для массива с ключами «s.id, s.name, курсы, courseID "не существует, хотя я сделал« select ('s ») в построителе запросов.

Я не знаю, возможно ли то, что я хотел бы сделать. В противном случае я подумываю о том, чтобы сбросить содержимое KitPages и самостоятельно собрать мои таблицы в шаблонах.

Спасибо!

ответ

0

Я понял, что то, что я хотел, невозможно, поскольку я считаю, что, поскольку KitPages DataGrid использует построитель запросов, я не смог бы получить объекты без изменения логики связки. Поэтому я вернулся к объектам, отправленным Twig, и повторил их атрибуты в таблице.