Я занимаюсь разработкой веб-приложения с использованием фреймворка symfony4.В этом приложении я имею дело с событиями.Эти события связаны с пользователями через другой класс, называемый Участие.Чтобы убедиться, что новичок не может зарегистрироваться для участия в прошлом событии, я создаю участие при первом сохранении события, добавляя участие для всех уже зарегистрированных пользователей.Для этого я объявил службу
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]);
}
}
}
, первое событие, сброшенное в моей базе данных, не имеет участия, связанного с.Вы видите, откуда происходит это странное поведение?
Поскольку это мой первый пост о переполнении стека, не стесняйтесь исправить меня, если мой вопрос неясен