首页 > 解决方案 > 使用 EntityType 获取其他实体中不存在的数据

问题描述

我想制作一个带有选择下拉列表的表单,其中包含来自用户实体的数据并且不在管理实体中使用

控制器

->add('User', EntityType::class, [
        'class'=>Users::class,
        'choice_label'=>function($users){
            return $users->getUsername();
        }
    ])

用户

/**
 * @ORM\Id()
 * @ORM\GeneratedValue()
 * @ORM\Column(type="integer")
 */
private $id;

/**
 * @ORM\Column(type="string", length=50)
 */
private $Username;

/**
 * @ORM\Column(type="string", length=30)
 */
private $Password;

/**
 * @ORM\Column(type="string", length=150)
 */
private $Email;

/**
 * @ORM\Column(type="boolean")
 */
private $isBlocked;

/**
 * @ORM\OneToOne(targetEntity="App\Entity\UserDetails", cascade={"persist", "remove"})
 */
private $Details;

/**
 * @ORM\OneToMany(targetEntity="App\Entity\Offers", mappedBy="User")
 */
private $Offers;

/**
 * @ORM\Column(type="datetime", nullable=true)
 */
private $joinedAt;

/**
 * @ORM\Column(type="datetime", nullable=true)
 */
private $lastLogged;

行政

/**
 * @ORM\Id()
 * @ORM\GeneratedValue()
 * @ORM\Column(type="integer")
 */
private $id;

/**
 * @ORM\OneToOne(targetEntity="App\Entity\Users", cascade={"persist", "remove"})
 * @ORM\JoinColumn(nullable=false)
 */
private $User;

/**
 * @ORM\Column(type="boolean")
 */
private $isDisabled;

/**
 * @ORM\Column(type="integer")
 */
private $rightsLevel;

我想避免添加具有多个权限的同一用户。我可以通过合并来阻止它,因此权限会改变,但我认为隐藏具有权限的用户是更好的选择。

有任何想法吗?

我知道我应该使用带有 EntityType query_builder 选项的左连接来执行此操作,但老实说,我真的不知道如何...

编辑 1

这样的东西

标签: symfonydoctrine

解决方案


您确实可以使用带有 EntityType 的查询构建器来选择用户并指定标签是用户名。

$builder->add('User', EntityType::class, [
    'class' => Users::class,
    'query_builder' => function (EntityRepository $er) {
        return $er->createQueryBuilder('u')
            ->orderBy('u.username', 'ASC');
    },
    'choice_label' => 'username',
]);

推荐阅读