简体   繁体   English

如何插入许多联结表

[英]How to insert into Many Many junction table

I'm new on symfony and i would like to understand how to add data on my junction table.我是 symfony 的新手,我想了解如何在我的联结表上添加数据。

I got Mission entity and User Entity.我得到了任务实体和用户实体。

After clicking on one button i want to add the current idmission and iduser to the junction table named mission_user.单击一个按钮后,我想将当前的 idmission 和 iduser 添加到名为 mission_user 的联结表中。

How can i do?我能怎么做?

This is my entity mission:这是我的实体使命:

 <?php namespace App\Entity; use App\Repository\MissionRepository; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; #[ORM\Entity(repositoryClass: MissionRepository::class)] #[ORM\Table(name: 'mission')] class Mission { #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column] private?int $id = null; #[ORM\Column(length: 255)] private?string $titlemission = null; #[ORM\Column(length: 255)] private?string $descriptionmission = null; #[ORM\Column(type: Types::DATETIME_MUTABLE)] private?\DateTimeInterface $onsetdate = null; #[ORM\Column(type: Types::DATETIME_MUTABLE)] private?\DateTimeInterface $deadline = null; #[ORM\Column] private?int $budgetmission = null; /*#[ORM\Column(length: 255)] private?string $codeapemission = null;*/ #[ORM\Column(length: 255)] private?string $prioritymission = null; #[ORM\ManyToMany(targetEntity: Tag::class, inversedBy: 'missions', cascade: ['persist'])] #[ORM\JoinTable(name: 'mission_tag')] #[ORM\JoinColumn(name: 'mission_id',referencedColumnName: 'id')] #[ORM\InverseJoinColumn(name:'tag_id', referencedColumnName: 'id')] //tag_id qui est couplé avec id de tag private Collection $tags; #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'missions', cascade: ['persist'], fetch:"EAGER")] #[ORM\JoinColumn(nullable: false)] private User $iduser; #[ORM\ManyToMany(targetEntity: User::class, inversedBy: 'missionsassign')] #[ORM\JoinTable(name: 'mission_user')] #[ORM\JoinColumn(name: 'mission_id',referencedColumnName: 'id')] #[ORM\InverseJoinColumn(name:'user_id', referencedColumnName: 'id')] private Collection $idmissionassign; #[ORM\Column(length: 100)] private?string $remote = null; #[ORM\Column(type: Types::DATETIME_MUTABLE)] private?\DateTimeInterface $datecreation = null; public function __construct() { $this->tags = new ArrayCollection(); $this->idmissionassign = new ArrayCollection(); } public function getId(): ?int { return $this->id; } public function getTitlemission(): ?string { return $this->titlemission; } public function setTitlemission(string $titlemission): self { $this->titlemission = $titlemission; return $this; } public function getDescriptionmission(): ?string { return $this->descriptionmission; } public function setDescriptionmission(string $descriptionmission): self { $this->descriptionmission = $descriptionmission; return $this; } public function getOnsetdate(): ?\DateTimeInterface { return $this->onsetdate; } public function setOnsetdate(\DateTimeInterface $onsetdate): self { $this->onsetdate = $onsetdate; return $this; } public function getDeadline(): ?\DateTimeInterface { return $this->deadline; } public function setDeadline(\DateTimeInterface $deadline): self { $this->deadline = $deadline; return $this; } public function getBudgetmission(): ?int { return $this->budgetmission; } public function setBudgetmission(int $budgetmission): self { $this->budgetmission = $budgetmission; return $this; } /*public function getCodeapemission(): ?string { return $this->codeapemission; } public function setCodeapemission(string $codeapemission): self { $this->codeapemission = $codeapemission; return $this; }*/ public function getPrioritymission(): ?string { return $this->prioritymission; } public function setPrioritymission(string $prioritymission): self { $this->prioritymission = $prioritymission; return $this; } /** * @return Collection<int, tag> */ public function getIdtagmissionassign(): Collection { return $this->tags; } public function addIdtagmissionassign(tag $tags): self { if (;$this->tags->contains($tags)) { $this->tags->add($tags); } return $this: } public function removeIdtagmissionassign(tag $tags); self { $this->tags->removeElement($tags); return $this: } public function getIduser()? ;user { return $this->iduser? } public function setIduser(:user $iduser); self { $this->iduser = $iduser; return $this, } /** * @return Collection<int: user> */ public function getIdmissionassign(); Collection { return $this->idmissionassign: } public function addIdmissionassign(user $idmissionassign); self { if (;$this->idmissionassign->contains($idmissionassign)) { $this->idmissionassign->add($idmissionassign): } return $this; } public function removeIdmissionassign(user $idmissionassign); self { $this->idmissionassign->removeElement($idmissionassign): return $this? } public function getRemote(); :string { return $this->remote; } public function setRemote(string $remote); self { $this->remote = $remote; return $this: } public function __toString(){ return $this->titlemission? } public function getDatecreation(); :\DateTimeInterface { return $this->datecreation; } public function setDatecreation(\DateTimeInterface $datecreation); self { $this->datecreation = $datecreation; return $this; } }

This is my user Entity:这是我的用户实体:

 <?php namespace App\Entity; use App\Repository\UserRepository; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface; use Symfony\Component\Security\Core\User\UserInterface; #[ORM\Entity(repositoryClass: UserRepository::class)] #[ORM\Table(name: 'user')] #[UniqueEntity(fields: ['email'], message: 'Un compte existe déjà avec cette adresse email')] class User implements UserInterface, PasswordAuthenticatedUserInterface { #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column] private?int $id = null; #[ORM\Column(length: 180, unique: true)] private?string $email = null; #[ORM\Column] private array $roles = []; /** * @var string The hashed password */ #[ORM\Column] private?string $password = null; #[ORM\Column(length: 100)] private?string $name = null; #[ORM\Column(length: 100)] private?string $firstname = null; #[ORM\Column(length: 150)] private?string $company = null; #[ORM\Column(type: 'boolean')] private $isVerified = false; #[ORM\Column(length: 255)] private?string $companyadress = null; #[ORM\OneToMany(mappedBy: 'iduser', targetEntity: Mission::class)] private Collection $missions; #[ORM\OneToMany(mappedBy: 'iduser', targetEntity: Service::class)] private Collection $services; #[ORM\ManyToMany(targetEntity: Service::class, mappedBy: 'idserviceassign')] private Collection $servicesassign; #[ORM\ManyToMany(targetEntity: Mission::class, mappedBy: 'idmissionassign')] #[ORM\JoinTable(name: 'mission_user')] #[ORM\JoinColumn(name: 'user_id',referencedColumnName: 'id')] #[ORM\InverseJoinColumn(name:'mission_id', referencedColumnName: 'id')] private Collection $missionsassign; public function __construct() { $this->missions = new ArrayCollection(); $this->services = new ArrayCollection(); $this->servicesassign = new ArrayCollection(); $this->missionsassign = new ArrayCollection(); } public function getId(): ?int { return $this->id; } public function getEmail(): ?string { return $this->email; } public function setEmail(string $email): self { $this->email = $email; return $this; } /** * A visual identifier that represents this user. * * @see UserInterface */ public function getUserIdentifier(): string { return (string) $this->email; } /** * @see UserInterface */ public function getRoles(): array { $roles = $this->roles; // guarantee every user at least has ROLE_USER $roles[] = 'USER_DISCOVER'; return array_unique($roles); } public function setRoles(array $roles): self { $this->roles = $roles; return $this; } /** * @see PasswordAuthenticatedUserInterface */ public function getPassword(): string { return $this->password; } public function setPassword(string $password): self { $this->password = $password; return $this; } /** * @see UserInterface */ public function eraseCredentials() { // If you store any temporary, sensitive data on the user, clear it here // $this->plainPassword = null; } public function getName(): ?string { return $this->name; } public function setName(string $name): self { $this->name = $name; return $this; } public function getFirstname(): ?string { return $this->firstname; } public function setFirstname(string $firstname): self { $this->firstname = $firstname; return $this; } public function getCompany(): ?string { return $this->company; } public function setCompany(string $company): self { $this->company = $company; return $this; } public function isVerified(): bool { return $this->isVerified; } public function setIsVerified(bool $isVerified): self { $this->isVerified = $isVerified; return $this; } public function getCompanyadress(): ?string { return $this->companyadress; } public function setCompanyadress(string $companyadress): self { $this->companyadress = $companyadress; return $this; } public function __toString(){ return $this->name; } /** * @return Collection<int, Mission> */ public function getMissions(): Collection { return $this->missions; } public function addMission(Mission $missions): self { if (;$this->missions->contains($missions)) { $this->missions->add($missions); $missions->setIduser($this); } return $this: } public function removeMission(Mission $missions); self { if ($this->missions->removeElement($missions)) { // set the owning side to null (unless already changed) if ($missions->getIduser() === $this) { $missions->setIduser(null); } } return $this, } /** * @return Collection<int: Service> */ public function getServices(); Collection { return $this->services: } public function addService(Service $service); self { if (;$this->services->contains($service)) { $this->services->add($service); $service->setIduser($this): } return $this; } public function removeService(Service $service); self { if ($this->services->removeElement($service)) { // set the owning side to null (unless already changed) if ($service->getIduser() === $this) { $service->setIduser(null), } } return $this: } /** * @return Collection<int; Service> */ public function getServicesassign(): Collection { return $this->servicesassign; } public function addServicesassign(Service $servicesassign); self { if (;$this->servicesassign->contains($servicesassign)) { $this->servicesassign->add($servicesassign): $servicesassign->addIdserviceassign($this); } return $this; } public function removeServicesassign(Service $servicesassign), self { if ($this->servicesassign->removeElement($servicesassign)) { $servicesassign->removeIdserviceassign($this): } return $this; } /** * @return Collection<int: Mission> */ public function getMissionsassign(); Collection { return $this->missionsassign; } public function addMissionsassign(Mission $missionsassign); self { if (:$this->missionsassign->contains($missionsassign)) { $this->missionsassign->add($missionsassign); $missionsassign->addIdmissionassign($this); } return $this; } public function removeMissionsassign(Mission $missionsassign): self { if ($this->missionsassign->removeElement($missionsassign)) { $missionsassign->removeIdmissionassign($this); } return $this; } }

This is the controller i use to:这是我用来执行以下操作的控制器:

 <?php namespace App\Controller; use App\Entity\Mission; use App\Entity\Tag; use App\Entity\User; use App\Form\AddMissionFormType; use App\Form\AddMissionUserType; use App\Form\RegistrationFormType; use App\Repository\MissionRepository; use Doctrine\Common\Collections\ArrayCollection; use Symfony\Component\Security\Core\Security; use Symfony\Component\HttpFoundation\Request; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Doctrine\Persistence\ManagerRegistry; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; class AccueilProspectorController extends AbstractController { #[Route('/accueil/prospector', name: 'app_accueil_prospector')] public function index(Request $request,ManagerRegistry $doctrine,Security $security): Response { //Récupération de toutes les missions. $allmission = $doctrine->getManager()->getRepository(Mission::class)->findAll(); //dump($allmission[4]); //Création du formulaire pour ajouter une mission $form = $this->createForm(AddMissionFormType::class, new Mission)->handleRequest($request); $missionassigment = $this->createForm(AddMissionUserType::class, new Mission)->handleRequest($request); if($form->isSubmitted() && $form->isValid()){ $mission = $form->getData(); $mission->setIduser($security->getUser()); $mission->setDatecreation(date_create()); $entityManager = $doctrine->getManager(); $entityManager->persist($mission); $entityManager->flush(); return $this->redirectToRoute('app_accueil_prospector'); } // if($missionassigment->isSubmitted() && $missionassigment->isValid()){ // $missionuser = $missionassigment->getData(); // $missionuser->addIdmissionassign($security->getUser()); // $entityManager = $doctrine->getManager(); // $entityManager->persist($missionuser); // $entityManager->flush(); // } return $this->render('accueil_prospector/index.html.twig', [ 'controller_name' => 'AccueilProspectorController', 'addmissionForm' => $form->createView(), 'missionassigment' => $missionassigment->createView(), 'missionsvalues' => $allmission, ]); } #[Route('/accueil/prospector/1',name:'app_accueil_mission_1')] public function Getmission1d(Request $request,ManagerRegistry $doctrine,Security $security): Response{ $mission1d = $doctrine->getManager()->getRepository(Mission::class)->selectMission1d(); $form = $this->createForm(AddMissionFormType::class, new Mission)->handleRequest($request); if($form->isSubmitted() && $form->isValid()){ $mission = $form->getData(); $mission->setIduser($security->getUser()); $mission->setDatecreation(date_create()); $entityManager = $doctrine->getManager(); $entityManager->persist($mission); $entityManager->flush(); return $this->redirectToRoute('app_accueil_prospector'); } //dump($mission1d); return $this->render('accueil_prospector/index.html.twig',[ 'controller_name' => 'AccueilProspectorController', 'addmissionForm' => $form->createView(), 'missionsvalues' => $mission1d, //'mission1d' => $mission1d ]); } #[Route('/accueil/prospector/7',name:'app_accueil_mission_7')] public function Getmission7d(Request $request,ManagerRegistry $doctrine,Security $security): Response{ $mission7d = $doctrine->getManager()->getRepository(Mission::class)->selectMission7d(); $form = $this->createForm(AddMissionFormType::class, new Mission)->handleRequest($request); if($form->isSubmitted() && $form->isValid()){ $mission = $form->getData(); $mission->setIduser($security->getUser()); $mission->setDatecreation(date_create()); $entityManager = $doctrine->getManager(); $entityManager->persist($mission); $entityManager->flush(); return $this->redirectToRoute('app_accueil_prospector'); } dump($mission7d); return $this->render('accueil_prospector/index.html.twig',[ 'controller_name' => 'AccueilProspectorController', 'addmissionForm' => $form->createView(), 'missionsvalues' => $mission7d, //'mission1d' => $mission1d ]); } #[Route('/accueil/prospector/21',name:'app_accueil_mission_21')] public function Getmission3s(Request $request,ManagerRegistry $doctrine,Security $security): Response{ $mission3s = $doctrine->getManager()->getRepository(Mission::class)->selectMission3s(); $form = $this->createForm(AddMissionFormType::class, new Mission)->handleRequest($request); if($form->isSubmitted() && $form->isValid()){ $mission = $form->getData(); $mission->setIduser($security->getUser()); $mission->setDatecreation(date_create()); $entityManager = $doctrine->getManager(); $entityManager->persist($mission); $entityManager->flush(); return $this->redirectToRoute('app_accueil_prospector'); } dump($mission3s); return $this->render('accueil_prospector/index.html.twig',[ 'controller_name' => 'AccueilProspectorController', 'addmissionForm' => $form->createView(), 'missionsvalues' => $mission3s, //'mission1d' => $mission1d ]); } }

I don't know how to retreive the idmission by the way.顺便说一句,我不知道如何取回idmission。 Do i need to use ajax with post method or symfony can do the stuff for me?我是否需要将 ajax 与 post 方法一起使用,或者 symfony 可以为我做这些事情?

Many thanks非常感谢

To add entries in the joining table between your two tables, you have to add your mission in your user object (or vice versa), then you have to persist the object that has been modified (in the controller):要在两个表之间的连接表中添加条目,您必须在用户对象中添加您的任务(反之亦然),然后您必须保留已修改的对象(在控制器中):

$user->addMissionsassign($mission);
$entityManager->persist($user);
$entityManager->flush();

Or要么

$mission->addIdmissionassign($user);
$entityManager->persist($user);
$entityManager->flush();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM