2017-08-20 2 views
1

Ich versuche eine Zeile zu meiner Basis einzufügen, vom Postboten zu einer lokalen API mit einigen Fremdschlüsseln und ich habe diesen Fehler:Symfony, Ungültige Daten (AppBundle Entity InterventionType), erwartet "AppBundle Entity Intervention

"message": "" "Invalid data \" 1 \ "(AppBundle \ Entity \ InterventionType), erwartet \" AppBundle \ Entity \ Intervention \

Es verwies auf die schlechten Entity und ich weiß nicht, warum. Ich ziele auf "Intervention", und die Lehre scheint in InterventionType gehen ... Hier ist meine Entität:

<?php 
 

 
namespace AppBundle\Entity; 
 

 
use Doctrine\ORM\Mapping as ORM; 
 
use Symfony\Component\Validator\Constraints as Assert; 
 
use \DateTime; 
 

 
/** 
 
* InterventionRapport 
 
* 
 
* @ORM\Table(name="intervention_rapport", options={"comment":"Table répertoriant les retours associés aux différentes interventions (commerciales et techniques) - Egalement utilisée pour rémunérer les techniciens et calculer les frais kilométriques tech/com"}) 
 
* @ORM\Entity 
 
*/ 
 
class InterventionRapport 
 
{ 
 
    /** 
 
    * @var integer 
 
    * @ORM\OneToOne(targetEntity="AppBundle\Entity\Intervention") 
 
    * @ORM\JoinColumn(name="intervention", nullable=false) 
 
    */ 
 
    private $intervention; 
 

 
    /** 
 
    * @var string 
 
    * 
 
    * @ORM\Column(name="message", type="text", nullable=true) 
 
    */ 
 
    private $message; 
 

 
    /** 
 
    * @var integer 
 
    * 
 
    * @ORM\Column(name="statut", type="integer", nullable=false) 
 
    */ 
 
    private $statut = '0'; 
 

 
    /** 
 
    * some other things 
 
    **/ 
 

 
    /** 
 
    * @var integer 
 
    * 
 
    * @ORM\Column(name="id", type="integer") 
 
    * @ORM\Id 
 
    * @ORM\GeneratedValue(strategy="AUTO") 
 
    */ 
 
    private $id; 
 
    
 
}

und das Unternehmen mit Fremdschlüssel gezielt:

<?php 
 

 
namespace AppBundle\Entity; 
 

 
use Doctrine\ORM\Mapping as ORM; 
 

 
/** 
 
* Intervention 
 
* 
 
* @ORM\Table(name="intervention") 
 
* @ORM\Entity 
 
*/ 
 
class Intervention 
 
{ 
 
    /** 
 
    * @var integer 
 
    * 
 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\InterventionType") 
 
    * @ORM\JoinColumn(name="type", nullable=false) 
 
    */ 
 
    private $type; 
 

 
    /** 
 
    * Some other things 
 
    **/ 
 

 
    /** 
 
    * @var integer 
 
    * 
 
    * @ORM\Column(name="id", type="integer") 
 
    * @ORM\Id 
 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
 
    */ 
 
    private $id; 
 
}

Und schließlich mein json:

{ 
    "message": "Steuh plait !", 
    "statut": 1, 
    "datemaintenanceprevue": "2017-08-23T15:00:00+00:00", 
    "heuresintervention": 1, 
    "heurestrajet": 0.5, 
    "kmtrajet": 27, 
    "deleted": 0, 
    "intervention": 1, 
    "id": 2 
} 

Bitte helfen, was mache ich falsch?

+0

Code des Controllers hinzufügen –

+1

Vielleicht: @ORM \ ManyToOne (targetEntity = "AppBundle \ Entity \ InterventionType") – Cerad

+0

@Cerad, brauchte diese Beziehung, aber ich löste das Problem mit einem Freund. Ich habe meinen Controller geändert und die Art, wie ich das Objekt erstelle, so bearbeitet, dass es in Ordnung ist –

Antwort

0

Ich habe eine Lösung gefunden, indem ich die Art geändert habe, wie ich die Linie erstellt habe. Ich habe nicht die Intervention id direkt gestellt, ich habe es in der URL übergeben:

class RapportController extends Controller 
 
{ 
 
    /** 
 
    * @Rest\Post(
 
    * path = "/reports/intervention={id}", 
 
    * name = "app_report_create" 
 
    *) 
 
    * @Rest\View(StatusCode = 201) 
 
    * @ParamConverter("report", converter="fos_rest.request_body") 
 
    */ 
 
    public function createAction(Request $request, InterventionRapport $report) 
 
    { 
 
     $em = $this->getDoctrine()->getManager(); 
 

 
     $intervention = $this->get('doctrine.orm.entity_manager') 
 
      ->getRepository('AppBundle:Intervention') 
 
      ->find($request->get('id')); 
 

 
     //$report = new \DateTime($datemaintenanceprevue); 
 

 
     $report->setIntervention($intervention); 
 

 
     $em->persist($report); 
 
     $em->flush(); 
 

 
     return $report; 
 
    }

Also, ich brauche nicht die Intervention ID von meinem Klienten zu schreiben‘json:

{ 
"message": "Steuh plait !", 
"statut": 1, 
"datemaintenanceprevue": "2017-08-23T15:00:00+00:00", 
"heuresintervention": 1, 
"heurestrajet": 0.5, 
"kmtrajet": 27, 
"deleted": 0, 
"id": 2 

}

ich weiß nicht, ob es der richtige Weg ist, es zu tun, aber es löste das Problem. Ich hoffe, es kann jemand anderem helfen.

Verwandte Themen