【问题标题】:Symfony 2 form + showing data from a relationSymfony 2 表单 + 显示来自关系的数据
【发布时间】:2011-10-26 05:21:51
【问题描述】:

我正在使用 Symfony 2 和教义。我目前有一个名为 Worker 的实体,在 Worker 实体中,与 User 实体存在多对一关系。

/**
 * @ORM\ManyToOne(targetEntity="User")
 * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
 */
private $user;

还有更多的实体,比如 Worker 以及 Manager 等。我想创建一个创建 Job 实体的表单。在表单中,我试图创建一个选择 Worker 的选择选项,但该 Worker 的名称存储在用户数据库中。有没有办法在表单选项中从用户数据库中打印工人的姓名。

$builder->add('workers','entity', [
    'label' => 'Workers:',
    'property' => 't.user.firstName',
    'empty_value' => 'Choose a Worker',
    'class' => 'Company\CompanyBundle\Entity\Worker',
    'query_builder' => function (\Company\CompanyBundle\Repository\WorkerRepository $repository) {
            return $repository->createQueryBuilder('t')
                ->add('orderBy', 't.user.firstName ASC');
        }
    ]);

有什么想法吗?

【问题讨论】:

    标签: forms symfony doctrine doctrine-orm


    【解决方案1】:

    我认为这样做就足够了:

    $builder->add('workers', 'entity', array(
                'class' => 'Company\CompanyBundle\Entity\Worker',
            ) );
    

    此外,您应该在您的 Worker 实体中实现一个“__toString()”方法,您可以在该方法中返回您想要显示的任何内容(在本例中为工作人员名称),因此您在 Worker 实体中的 __toString 方法将类似于这个:

    function __toString() {
        return $this->getName();
    }
    

    这是我通常实现这种关系的方式,希望对你有帮助!

    【讨论】:

      【解决方案2】:

      如果您愿意,可以选择其他选项:

      $builder->add('workers', 'entity', array(
          'class' => 'Company\CompanyBundle\Entity\Worker',
          'property' => 'property_name'
      ));
      

      如果定义了选项“property”,则不需要在实体类中实现“_toString()”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-13
        • 1970-01-01
        • 1970-01-01
        • 2013-10-27
        相关资源
        最近更新 更多