J'aurai besoin de votre aide car je suis actuellement le cours "Construisez une API REST avec Symfony" et j'ai un petit problème.
Alors voilà, j'ai deux entités, une User et une Projet. Le soucis est que lorsque j’envoie via POSTMAN un projet, celui-ci s'enregistre bien en BDD mais créer un nouvelle user au lieu de le lier a celui qui est déjà en base et qui est dans les données fournie a l'API.
Comme vous pouvez le voir sur l'image, dans le projet envoyé via POSTMAN j'ai un User avec l'id 1, or mon api me renvoi le projet avec un User avec l'id 8... et quand je vais voir en base un User avec l'id 8 a été créé.
Voici mon User.php
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\Entity
* @ORM\Table()
*/
class User
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(type="string", length=100)
*/
private $login;
/**
* @ORM\Column(type="string", length=100)
*/
private $password;
/**
* @ORM\Column(type="string", length=100)
*/
private $mail;
/**
* @ORM\Column(type="string", length=100)
*/
private $nom;
/**
* @ORM\Column(type="string", length=100)
*/
private $prenom;
/**
* @ORM\Column(type="date")
*/
private $dateNaissance;
/**
* @ORM\OneToMany(targetEntity="Projet", mappedBy="user", cascade={"persist"})
*/
private $projets;
public function __construct()
{
$this->projets = new ArrayCollection();
}
public function getId(){
return $this->id;
}
public function getLogin(){
return $this->login;
}
public function setLogin($login){
$this->login = $login;
return $this;
}
public function getPassword(){
return $this->password;
}
public function setPassword($password){
$this->password = $password;
return $this;
}
public function getMail(){
return $this->mail;
}
public function setMail($mail){
$this->mail = $mail;
return $this;
}
public function getNom(){
return $this->nom;
}
public function setNom($nom){
$this->nom = $nom;
return $this;
}
public function getPrenom(){
return $this->nom;
}
public function setPrenom($prenom){
$this->prenom = $prenom;
return $this;
}
public function getDateNaissance(){
return $this->dateNaissance;
}
public function setDateNaissance($dateNaissance){
$this->dateNaissance = $dateNaissance;
return $this;
}
public function getProjets(){
return $this->projets;
}
}
Voici mon Projet.php
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table()
*/
class Projet
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(type="date")
*/
private $dateDebut;
/**
* @ORM\Column(type="date")
*/
private $dateFin;
/**
* @ORM\ManyToOne(targetEntity="User", cascade={"all"}, fetch="EAGER")
*/
private $user;
public function getId(){
return $this->id;
}
public function getdateDebut(){
return $this->dateDebut;
}
public function setDateDebut($dateDebut){
$this->dateDebut = $dateDebut;
return $this;
}
public function getDateFin(){
return $this->dateFin;
}
public function setDateFin($dateFin){
$this->dateFin = $dateFin;
return $this;
}
public function getUser(){
return $this->user;
}
public function setUser($user){
$this->user = $user;
return $this;
}
}
Et voici mon ProjetController.php
<?php
namespace AppBundle\Controller;
use AppBundle\Entity\Projet;
use FOS\RestBundle\Controller\FOSRestController;
use FOS\RestBundle\Controller\Annotations as Rest;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class ProjetController extends FOSRestController
{
/**
* @Rest\Get(
* path = "/projet/{id}",
* name = "projet_show",
* requirements = {"id"="\d+"}
* )
* @Rest\View(
* statusCode = 201
* )
*/
public function showAction(Projet $projet){
return $projet;
}
/**
* @Rest\Post(
* path = "/addProjet",
* name = "app_projet_create"
* )
* @Rest\View(StatusCode = 201)
* @ParamConverter("projet", converter="fos_rest.request_body")
*/
public function createAction(Projet $projet){
$em = $this->getDoctrine()->getManager();
$em->persist($projet);
$em->flush();
return $this->view($projet, Response::HTTP_CREATED, ['Location' => $this->generateUrl('app_projet_create', ['id' => $projet->getId(), UrlGeneratorInterface::ABSOLUTE_URL])]);
}
}
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
" Celui qui aime à apprendre est bien près du savoir " Confucius
" Celui qui aime à apprendre est bien près du savoir " Confucius