2014-10-30 8 views
5

Ho una relazione molti a uno tra le entità progetto e Corso perché ogni corso può avere molti progetti di tanti progetti potrebbe essere correlato a lo stesso corso.Symfony2: Attenzione: spl_object_hash() si aspetta parametro 1 per essere oggetto, integer data

Questi sono i miei soggetti:

class Project{ 

    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    //... other fields ... 


    //----------------------- DATABASE RELATIONSHIP ----------------// 

    //PROJECT-COURSE - M:1 relationship 
    /** 
    * @ORM\ManyToOne(targetEntity="Course", inversedBy="project") 
    * @ORM\JoinColumn(name="course_id", referencedColumnName="id") 
    **/ 
    private $course; 

e

class Course{ 

    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 

    //... other fields ... 

    //----------------------- DATABASE RELATIONSHIP----------------// 

    //COURSE-PROJECT 1:M relationship 
    /** 
    * @ORM\OneToMany(targetEntity="Project", mappedBy="course") 
    **/ 
    private $project; 

L'errore viene visualizzato quando si tenta di inserire un nuovo progetto per il mio corso, questo è il mio generatore di forma:

  $builder 
       ->add('name', 'text', array(
        'attr' => array('class' => 'form-control'))) 
       ->add('description', 'textarea', array(
        'attr' => array('class' => 'form-control', 'rows' => '10'))) 
       ->add('submit', 'submit', array(
        'attr' => array('class' => 'btn btn-primary'))); 

Cerco di inserire questi dati creando un oggetto Project e riempiendolo con il risultato del modulo come è possibile vedi:

$project->setName($form->get('name')->getData()); 
       $project->setDescription($form->get('description')->getData()); 
       $project->setPhasesNumber($form->get('phases_number')->getData()); 
       $project->setPathNumber($form->get('path_number')->getData()); 
       $project->setYear(date('Y')); 
       $project->setCourse(5); //number 5 is just a test 

       $em = $this->getDoctrine()->getManager(); 
       $em->persist($project); 
       $em->flush(); 

Il problema dovrebbe essere collegato al comando $project->setCourse(5); e ho visto che se rimuovo il rapporto tra progetto e Corso non appare il bug. L'errore scompare anche se commento la riga usata per impostare l'ID del corso, quindi penso di avere un problema con questa relazione ma non riesco a capire dove.

Ho appena letto altre domande come questa su StackOverflow ma non mi aiuta.

Grazie in anticipo.

risposta

6

La ricerca di un oggetto con un'istanza di Course passando semplicemente l'ID del corso non funziona.

Si potrebbe fare:

//... 
$course = $this->getDoctrine() 
       ->getManager() 
       ->getRepository('Namespace:Course') 
       ->findOneById(5); 
$project->setCourse($course); 
//... 

Come cita completa se si sa che l'entità già esistente si può solo impostare senza una ricerca db facendo:

$project->setCourse($this->getDoctrine() 
         ->getManager() 
         ->getReference('Namespace:Course', 5) 
); 
+0

Ora è più chiaro, grazie , davvero;) –

+0

Mi ci sono volute diverse ore per arrivare a questo punto, e la tua soluzione è stata davvero d'aiuto. Grazie –

+1

In realtà sarebbe meglio usare '$ this-> getDoctrine() -> getManager() -> getReference ('Namespace: Course', 5);' senza cercare in db! – Full

Problemi correlati