Php 如何创建EntityManager实例以检索对象?

Php 如何创建EntityManager实例以检索对象?,php,symfony,doctrine,Php,Symfony,Doctrine,注意:我不想创建服务。这只是一个简单的应用程序。在平面php中,这将是小菜一碟,但由于某些原因,在symfony/doctrine中这是非常困难的…:(EntityManager在控制器中可用,但由于某些原因,它在其他类中不可用。我不关心MVP和干净的代码等等。我只想让它工作。我不明白为什么它会如此痛苦 public function buildForm(FormBuilderInterface $builder, array $options) { $current_year=getd

注意:我不想创建服务。这只是一个简单的应用程序。在平面php中,这将是小菜一碟,但由于某些原因,在symfony/doctrine中这是非常困难的…:(EntityManager在控制器中可用,但由于某些原因,它在其他类中不可用。我不关心MVP和干净的代码等等。我只想让它工作。我不明白为什么它会如此痛苦

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $current_year=getdate()['year'];
    $em = new \Doctrine\ORM\EntityManager;
    $approving_teachers = $em->createQuery('select u from Teacher t where IsAuthorized = 1')->getResult();

    $builder
        ->add('startDatetime', 'datetime', array('years' => range($current_year-1, $current_year), 'time_widget' => 'text'))
        ->add('hoursServed', 'number', array('constraints'=> array(new \Symfony\Component\Validator\Constraints\Range(array('min'=>0, 'max'=>500)))))
        ->add('activity')
        ->add('student')
        ->add('approvingTeacher', 'entity', array(
            'class' => 'Teacher',
            'choices' => $approving_teachers
        ))
    ;
}

为什么不使用“实体字段类型”:


使用实体字段类型,您可以使用EntityRepository检索您需要的任何内容。

查询生成器添加到您的
审批教师
字段。并使用EntityRepository

use Doctrine\ORM\EntityRepository;

此外,请检查文档:


首先看一看条令配置文档:。正如您将看到的,这比更新em要复杂一些。此外,在您的代码中需要使用相同的em。因此需要服务。也许您可以提供一些关于为什么不想注入它的详细信息。是的,他的查询需要工作,但从他询问的标题来看如何实例化实体经理。是的,我知道Cerad。我只是给他其他选择。我不知道如何将其变成服务。但他可以试试我的答案,因为他不喜欢它“复杂”
    ->add('approvingTeacher', 'entity', array(
            ...
            'query_builder' => function(EntityRepository $er) {
                return something...
            }
))