如何在Symfony 5的命令中访问实体管理器(Doctrine)

【如何在Symfony 5的命令中访问实体管理器(Doctrine)】在Symfony中, 我们使用命令执行的最常见的事情之一就是根据应用程序中的特定条件修改数据库内容的简单事实。通过控制器和服务中的实体管理器访问数据库非常简单且容易实现。在Commands中也很容易, 但是官方文档中没有对此进行记录和说明。就像Symfony 5中的所有内容一样, 你可以通过Services和Commands的构造函数注入服务, 因此要在命令内获取EntityManager, 只需注入EntityManagerInterface就像这样:

< ?phpnamespace App\Command; // ...use Doctrine\ORM\EntityManagerInterface; class ExampleCommand extends Command{// ...private $entityManager; public function __construct(EntityManagerInterface $entityManager){$this-> entityManager = $entityManager; parent::__construct(); }// ...}

整个类都可以访问实体管理器, 你将能够像在控制器和服务中通常那样运行查询, 创建和持久化实体。
例子下面的ExampleCommand.php文件包含上述逻辑。你可以简单地更新命令的代码并更改名称:
< ?php// src/Command/ExampleCommand.phpnamespace App\Command; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; // 1. Import the ORM EntityManager Interfaceuse Doctrine\ORM\EntityManagerInterface; class ExampleCommand extends Command{// the name of the command (the part after "bin/console")protected static $defaultName = 'app:run-example'; // 2. Expose the EntityManager in the class levelprivate $entityManager; public function __construct(EntityManagerInterface $entityManager){// 3. Update the value of the private entityManager variable through injection$this-> entityManager = $entityManager; parent::__construct(); }protected function configure(){// ...}// 4. Use the entity manager in the command code ...protected function execute(InputInterface $input, OutputInterface $output){$em = $this-> entityManager; // A. Access repositories$repo = $em-> getRepository("App:SomeEntity"); // B. Search using regular methods.$res1 = $repo-> find(1); $res2 = $repo-> findBy(['field' => 'value']); $res3 = $repo-> findAll(); $res4 = $repo-> createQueryBuilder('alias')-> where("alias.field = :fieldValue")-> setParameter("fieldValue", 123)-> setMaxResults(10)-> getQuery()-> getResult(); // C. Persist and flush$em-> persist($someEntity); $em-> flush(); return 0; }}

编码愉快!

    推荐阅读