Symfony2 / KitpagesDataGridBundle 实体操作
Symfony2 / KitpagesDataGridBundle entities manipulation
我正在使用 Symfony 2.7 和 KitpagesDataGridBundle
我正在为一所学校开发一个应用程序,其中我有两个具有 1-N 关系的实体:Section-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, 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;
现在,我希望能够从该部分检索链接的 'course' 对象并在 Twig 模板中迭代它们。目前,由于我还不能这样做,我创建了一个原型,它将使用查询生成器将课程名称和 ID 作为字符串连接在 Section 的存储库中,然后将 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;
}
部分控制器
('Dummy[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" for array with keys "s.id, s.name, courses, coursesID" does not exist ,尽管我在查询构建器中做了一个 "select('s')"。
我不知道我想做的事情是否可行。否则,我正在考虑放弃 KitPages 的东西并在模板中自己构建我的表。
谢谢!
我发现我想要的是不可能的,因为我相信,由于 KitPages DataGrid 使用的是查询生成器,我将无法在不更改捆绑包逻辑的情况下检索实体。因此,我恢复到发送到 Twig 的实体,并在 table.
中迭代它们的属性
我正在使用 Symfony 2.7 和 KitpagesDataGridBundle
我正在为一所学校开发一个应用程序,其中我有两个具有 1-N 关系的实体:Section-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, 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;
现在,我希望能够从该部分检索链接的 'course' 对象并在 Twig 模板中迭代它们。目前,由于我还不能这样做,我创建了一个原型,它将使用查询生成器将课程名称和 ID 作为字符串连接在 Section 的存储库中,然后将 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;
}
部分控制器
('Dummy[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" for array with keys "s.id, s.name, courses, coursesID" does not exist ,尽管我在查询构建器中做了一个 "select('s')"。
我不知道我想做的事情是否可行。否则,我正在考虑放弃 KitPages 的东西并在模板中自己构建我的表。
谢谢!
我发现我想要的是不可能的,因为我相信,由于 KitPages DataGrid 使用的是查询生成器,我将无法在不更改捆绑包逻辑的情况下检索实体。因此,我恢复到发送到 Twig 的实体,并在 table.
中迭代它们的属性