2014-10-30 11 views
5

ich viele zu einer Beziehung zwischen den Entitäten Projekt und Course haben, weil jeder Kurs viele Projekte so viele Projekte haben könnte zusammenhängen der gleiche Kurs.Symfony2: Warnung: spl_object_hash() erwartet Parameter 1 Objekt zu sein, integer gegeben

Das sind meine Einheiten:

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; 

und

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; 

Der Fehler wird angezeigt, wenn ich versuche, ein neues Projekt für meinen Kurs einzufügen, das ist mein Formular-Builder:

  $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'))); 

Ich versuche, diese Daten einzufügen, ein Projekt-Objekt zu erstellen und es mit dem Ergebnis des Formulars zu füllen, wie Sie können siehe:

$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(); 

Das Problem sollte $project->setCourse(5); auf den Befehl in Beziehung gesetzt werden, und ich habe gesehen, dass, wenn ich die Beziehung zwischen Projekt und Kurs entfernen Sie den Fehler nicht angezeigt. Der Fehler verschwindet auch, wenn ich die Zeile, die für die Kurs-ID verwendet wurde, kommentiere. Ich denke, ich habe ein Problem mit dieser Beziehung, aber ich kann nicht verstehen, wo.

Ich habe gerade andere Frage wie diese auf Stackoverflow gelesen, aber es hilft mir nicht.

Vielen Dank im Voraus.

Antwort

6

Seine Suche nach Ihnen, ein Objekt mit einer Instanz Course zu verwenden, nur die ID des Kurses zu übergeben, funktioniert nicht.

Sie könnten tun:

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

als Voll erwähnt, wenn Sie wissen, dass das Unternehmen bereits vorhanden Sie können es einfach eingestellt ohne db-Lookup by doing:

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

jetzt klarer, danke , wirklich;) –

+0

Ich brauchte mehrere Stunden, um zu diesem Punkt zu kommen, und Ihre Lösung war wirklich hilfreich. Danke –

+1

Eigentlich wäre es besser zu verwenden '$ this-> getDoctrine() -> getManager() -> getReference ('Namespace: Kurs', 5);' ohne in db zu suchen! – Full

Verwandte Themen