Bonjour
J'ai deux tables users et devices. chaques users peut avoir plusieurs devices et chaque devices peut avoir plusieurs users. j'ai donc fait ne relation ManyToMany
Table users
/**
* @var Collection<int, Users>
*/
#[ORM\ManyToMany(targetEntity: Users::class, mappedBy: 'devices')]
#[ORM\JoinTable(name:"users_devices")]
private Collection $users;
public function __construct()
{
$this->users = new ArrayCollection();
}
......
/**
* @return Collection<int, Users>
*/
public function getUsers(): Collection
{
return $this->users;
}
public function addUser(Users $user): static
{
if (!$this->users->contains($user)) {
$this->users->add($user);
$user->addDevice($this);
}
return $this;
}
public function removeUser(Users $user): static
{
if ($this->users->removeElement($user)) {
$user->removeDevice($this);
}
return $this;
}
Table devices
/**
* @var Collection<int, Devices>
*/
#[ORM\ManyToMany(targetEntity: Devices::class, inversedBy: 'users')]
private Collection $devices;
public function __construct()
{
$this->devices = new ArrayCollection();
}
......
/**
* @return Collection<int, Devices>
*/
public function getDevices(): Collection
{
return $this->devices;
}
public function addDevice(Devices $device): static
{
if (!$this->devices->contains($device)) {
$this->devices->add($device);
}
return $this;
}
public function removeDevice(Devices $device): static
{
$this->devices->removeElement($device);
return $this;
}
Lors de la migration une table de jointure users_devices
Le fonctionement est correcte lorsque que fais des insertions
Par contre je n'arrive pas à récupérer les devices pour un user
Par SQL la jointure me donne bien les infos
SELECT u.id,u.name,d.id,d.name FROM `users`AS u
JOIN user_device AS j ON j.userid = u.id
JOIN devices AS d ON j.deviceid = d.id
WHERE u.id = 1;
Voici la fonction dans mon UsersController pour recurpérer les devices
#[Route('/users/{id}', name: 'users.show', methods: ['GET'])]
public function show(
Users $user,
EntityManagerInterface $entityManager
): Response {
$userId = $User->getId();
$devices = $User->getDevices($userId);
dd($devices);
return $this->render('users/show.html.twig', [
'user' => $User,
]);
}
Le retour est une collection vide
Doctrine\ORM\PersistentCollection {#697 ▼
#collection:
Doctrine\Common\Collections
\
ArrayCollection
{#684 ▼
-elements: []
}
#initialized: false
-snapshot: []
-owner:
App\Entity
\
Comment arriver à récupérer les infos
Merci
Je me répond
Il faut une querybuilder pour recuperer les infos
dans UsersRepository.php
public function getDevicesFromUser(): array
{
return $this->createQuerybuilder('user')
->select('user','devices',)
->leftjoin('user.devices', 'devices')
->getQuery()
->getResult()
;
}
dans UsersController.php
$devices = $repository->getDevicesFromUser();