php - 为什么 Doctrine PostPersist Event 错过了我的夹具类的第一个 Instance 元素?
问题描述
我正在使用 symfony4 框架开发一个网络应用程序。在这个应用程序中,我处理事件。这些事件通过另一个名为 Participation 的类链接到用户。为了确保新人无法注册过去的活动,我在活动的第一次持久性中创建了参与,为所有已经注册的用户添加了参与。为此,我声明了一项服务
service:
App\EventListener\CreateParticipations:
tags:
- { name: doctrine.event_listener, event: postPersist }
arguments: [ "@doctrine.orm.entity_manager" ]
定义如下:
<?php
namespace App\EventListener;
use Doctrine\Common\Persistence\Event\LifecycleEventArgs;
use App\Entity\Participation;
use App\Entity\Event;
use App\Entity\User;
use Doctrine\ORM\EntityManager;
class CreateParticipations
{
private $em; // EntityManager
public function __construct(EntityManager $entityManager)
{
$this->em = $entityManager;
}
public function postPersist(LifecycleEventArgs $args)
{
$event = $args->getObject();
if ($event instanceof Event) {
$users = $this->em->getRepository(User::class)->findAll();
$nbUser = count($users);
for ($i=0; $i < $nbUser; $i++)
{
$participation = new Participation ();
$participation->setUser($users[$i]);
$participation->setEvent($event);
$this->em->persist($participation);
}
$this->em->flush();
}
return;
}
}
我创建的添加/新事件过程似乎可以正常工作。但是当我创建一些夹具来使用这段代码测试我的应用程序时:
class AppFixtures extends Fixture
{
public function load(ObjectManager $manager)
{
//creation of the users and tags
//event creator
$nbEvent = 1;
$events = array($nbEvent);
for ($i=0; $i< $nbEvent; $i++)
{
$events[$i] = new Event();
$date = $faker->dateTimeThisMonth($max = 'now', $timezone = null);
$fin = new \DateTime($date->format('Y-m-d H:i:s'));
$events[$i]->setStart($date);
$events[$i]->setFinish($fin->add(new \DateInterval('PT2H')));
$events[$i]->setInfo($faker->sentence(10, true));
$events[$i]->setMaxPlayers(10);
$events[$i]->setName($faker->word());
$events[$i]->setTag($tag[$faker->numberBetween(0, 2)]);
$events[$i]->setActive(true);
$location = new Location();
$location->setFullAdr($faker->address());
$location->setLat($faker->latitude($min = -90, $max = 90));
$location->setLng($faker->longitude($min = -180, $max = 180));
$events[$i]->setLocation($location);
$manager->persist($events[$i]);
}
}
}
在我的数据库中刷新的第一个事件没有关联的参与。你知道这种奇怪的行为是从哪里来的吗?
因为这是我关于堆栈溢出的第一篇文章,如果我的问题不清楚,请随时纠正我
解决方案
推荐阅读
- python - 如何使用 Lambert Conformal 投影显示 Cartopy 网格线标签?
- python - Sympy 单位 - 前缀转换
- python - Django中顶级模块和子模块在使用时有什么区别-“python manage.py startapp polls”
- huggingface-transformers - 如何使用 Huggingface 预训练模型来获取用于训练模型的数据集的输出?
- cypress - 赛普拉斯 API 请求 - 不是函数的错误
- javascript - 在 React 应用程序的窗口中使用 Redux 默认存储
- python - 使用存储在谷歌驱动器中的 zip 文件
- css - 在浏览器中查看时,HTML 未应用 CSS
- bash - 仅当来自 url 的文件存在并隐藏输出时才从 url 获取 bash
- python - 视觉 sudio 中的 tempCodeRunnerFile.py 问题