Sonata Admin:当关联实体有数千条记录时,如何在编辑表单中表示多对多?

时间:2013-07-25 10:15:40

标签: php symfony sonata-admin

在我的实体中,我在角色和用户之间存在多对多的关系

/**
 * @ORM\ManyToMany(targetEntity="User", mappedBy="roles")
 */
protected $users;

Role实体的编辑表单中,我希望能够看到具有该角色的用户,以及添加和删除用户,因此我在users字段中添加了configureFormFields字段{1}}

protected function configureFormFields(FormMapper $formMapper) {
    $formMapper
        ->add('name')
        ->add('description')
        ->add('users');
}

问题在于Sonata的方法非常幼稚:要呈现此表单,它会执行一个查询来检索角色的字段,一个用于检索具有此角色的用户的字段,另一个用于检索<的字段。 strong>数据库中的所有用户 !!!

由于我在数据库中拥有超过20,000名用户,因此使用超过250MB的内存

有没有办法指示Sonata显示带搜索的分页列表或类似内容?

1 个答案:

答案 0 :(得分:1)

pcdummy/AjaxCompleteBundle可能有兴趣吗?我今天偶然发现了这件事。

我还建议创建单独的中间user_roles实体(以及它的管理员)。然后,使用sonata_type_collection,您可以将Group:userGroups字段添加到Group admin中。请务必不要在group表单配置中包含UsersGroupAdmin字段。