Add new methods to RegroupmentRepository and fix association

Regroupment/Center
This commit is contained in:
Julien Fastré 2023-06-07 13:06:10 +02:00
parent 77f8cf0e1a
commit 73b95732db
Signed by: julienfastre
GPG Key ID: BDE2190974723FCB
5 changed files with 72 additions and 4 deletions

View File

@ -0,0 +1,6 @@
kind: DX
body: Add methods to RegroupmentRepository and fullfill Center / Regroupment Doctrine
mapping
time: 2023-06-07T13:03:44.177864269+02:00
custom:
Issue: ""

View File

@ -48,12 +48,19 @@ class Center implements HasCenterInterface
*/ */
private string $name = ''; private string $name = '';
/**
* @var Collection<Regroupment>
* @ORM\ManyToMany(targetEntity=Regroupment::class, mappedBy="centers")
*/
private Collection $regroupments;
/** /**
* Center constructor. * Center constructor.
*/ */
public function __construct() public function __construct()
{ {
$this->groupCenters = new \Doctrine\Common\Collections\ArrayCollection(); $this->groupCenters = new ArrayCollection();
$this->regroupments = new ArrayCollection();
} }
/** /**
@ -106,6 +113,14 @@ class Center implements HasCenterInterface
return $this->name; return $this->name;
} }
/**
* @return Collection<Regroupment>
*/
public function getRegroupments(): Collection
{
return $this->regroupments;
}
/** /**
* @param $name * @param $name
* *

View File

@ -22,11 +22,12 @@ use Doctrine\ORM\Mapping as ORM;
class Regroupment class Regroupment
{ {
/** /**
* @var Center
* @ORM\ManyToMany( * @ORM\ManyToMany(
* targetEntity=Center::class * targetEntity=Center::class,
* inversedBy="regroupments"
* ) * )
* @ORM\Id * @ORM\Id
* @var Collection<Center>
*/ */
private Collection $centers; private Collection $centers;
@ -52,6 +53,26 @@ class Regroupment
$this->centers = new ArrayCollection(); $this->centers = new ArrayCollection();
} }
public function addCenter(Center $center): self
{
if (!$this->centers->contains($center)) {
$this->centers->add($center);
$center->getRegroupments()->add($this);
}
return $this;
}
public function removeCenter(Center $center): self
{
if ($this->centers->contains($center)) {
$this->centers->removeElement($center);
$center->getRegroupments()->removeElement($this);
}
return $this;
}
public function getCenters(): Collection public function getCenters(): Collection
{ {
return $this->centers; return $this->centers;

View File

@ -31,7 +31,7 @@ class RegroupmentType extends AbstractType
->add('centers', EntityType::class, [ ->add('centers', EntityType::class, [
'class' => Center::class, 'class' => Center::class,
'multiple' => true, 'multiple' => true,
'attr' => ['class' => 'select2'], 'expanded' => true,
]) ])
->add('isActive', CheckboxType::class, [ ->add('isActive', CheckboxType::class, [
'label' => 'Actif ?', 'label' => 'Actif ?',

View File

@ -14,6 +14,8 @@ namespace Chill\MainBundle\Repository;
use Chill\MainBundle\Entity\Regroupment; use Chill\MainBundle\Entity\Regroupment;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository; use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\NonUniqueResultException;
use Doctrine\ORM\NoResultException;
use Doctrine\Persistence\ObjectRepository; use Doctrine\Persistence\ObjectRepository;
final class RegroupmentRepository implements ObjectRepository final class RegroupmentRepository implements ObjectRepository
@ -59,6 +61,30 @@ final class RegroupmentRepository implements ObjectRepository
return $this->repository->findOneBy($criteria, $orderBy); return $this->repository->findOneBy($criteria, $orderBy);
} }
/**
* @throws NonUniqueResultException
* @throws NoResultException
*/
public function findOneByName(string $name): ?Regroupment
{
return $this->repository->createQueryBuilder('r')
->where('LOWER(r.name) = LOWER(:searched)')
->setParameter('searched', $name)
->getQuery()
->getSingleResult();
}
/**
* @return array<Regroupment>
*/
public function findRegroupmentAssociatedToAnyCenter(): array
{
return $this->repository->createQueryBuilder('r')
->where('SIZE(r.centers) = 0')
->getQuery()
->getResult();
}
public function getClassName() public function getClassName()
{ {
return Regroupment::class; return Regroupment::class;