【问题标题】:Symfony 3, ManyToOne relation in formSymfony 3,表单中的多对一关系
【发布时间】:2017-10-07 17:50:35
【问题描述】:

我有一些实体,我尝试设置用户和权限之间的关系。我希望有可能为用户分配权限组,所以我创建了实体 User、GroupAssociationsUser、Permissions。我认为最好的方法是在 GroupAssociationsUser 中创建与用户和权限的关系 ManyToOne。下面你可以看到 GroupAssociationsUser 实体的代码:

/**
 * @ORM\ManyToOne(targetEntity="Permissions", inversedBy="group_assoc_user")
 * @ORM\JoinColumn(name="group_permissions", referencedColumnName="id", nullable=FALSE)
 */
private $group_permissions;

/**
 * @ORM\ManyToOne(targetEntity="User", inversedBy="group_assoc_user")
 * @ORM\JoinColumn(name="user_assoc", referencedColumnName="id", nullable=FALSE)
 */
private $user_assoc;

然后我还在用户实体中创建了关系:

/**
 * @ORM\OneToMany(targetEntity="GroupAssociationsUser", mappedBy="user_assoc")
 */
private $group_assoc_user;


public function __construct()
{
    $this->group_assoc_user = new ArrayCollection();
}

终于在 Permission 实体中:

/**
* @ORM\OneToMany(targetEntity="GroupAssociationsUser", mappedBy="group_permissions")
*/
private $group_assoc_user;

public function __construct()
{
$this->group_assoc_user = new ArrayCollection();
}

所以基本上我希望在我的用户编辑页面上有选择列表,并且我希望有可能选择权限组来分配给用户。

所以我创建了表单:

->add('group_assoc_user', EntityType::class, array(
            'class' => 'AppBundle:Permissions',
            'choice_label'=> 'group_name',
            'placeholder' => 'no rights',
        ))

问题是,无论我做什么,我都只有退出权限的列表,或者如果我将代码更改为:

        ->add('group_assoc_user', EntityType::class, array(
            'class' => 'AppBundle:GroupAssociationsUser',
            'choice_label'=> 'Permissions.group_name',
            'placeholder' => 'no rights',
        ));

我只列出了未分配的已分配权限。我究竟做错了什么?

即使我获得了所有权限名称,我如何强制教义标记已分配的字段?

【问题讨论】:

  • 尝试使用查询生成器 -like this
  • 嗨彼得,我应该返回什么? 'class' => 'AppBundle:Permissions', 'query_builder' => function (EntityRepository $er) { return $er->createQueryBuilder('u') ->orderBy('u.id', 'ASC'); }, 使用我的方法(上面的代码),我可以获得分配的字段信息,但没有未分配的信息。或者像在第一个示例中一样,我可以获得所有权限,但我不知道应该如何选择选定的 (

标签: php symfony doctrine relational-database symfony-3.2


【解决方案1】:

尝试将 Multiple 设置为 true。

http://symfony.com/doc/current/reference/forms/types/entity.html#multiple

    ->add('group_assoc_user', EntityType::class, array(
        'class' => 'AppBundle:GroupAssociationsUser',
        'choice_label'=> 'Permissions.group_name',
        'placeholder' => 'no rights',
        'multiple' => true,
    ));

你可能也喜欢

'expanded' => true

选项

【讨论】:

    猜你喜欢
    • 2017-04-07
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多