2014-10-30 14 views
5

mam wiele do jednego relacji pomiędzy podmiotami Projektu i przedmiotu ponieważ każdy kurs może mieć wiele projektów tak wiele projektów może być związane z ten sam kurs.Symfony2: Ostrzeżenie: spl_object_hash() oczekuje parametr 1 za przedmiot, całkowita podana

To są moje podmioty:

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; 

i

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; 

Błąd pojawia się, gdy próbuję wstawić nowy projekt dla mojego kursu, to moja forma budowniczy:

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

Próbuję wstawić te dane, tworząc obiekt projektu i wypełniając go wynikiem formularza, jak to tylko możliwe patrz:

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

Problem powinien być związany z poleceniem $project->setCourse(5); i widziałem, że jeśli usunąć relację między Project i oczywiście błąd się nie pojawia. Błąd zniknie, nawet jeśli skomentuję linię używaną do ustawienia identyfikatora kursu, więc myślę, że mam problem z tą relacją, ale nie mogę zrozumieć, gdzie.

Właśnie czytałem inne pytanie w ten sposób na stackoverflow, ale to nie pomaga mi.

Z góry dziękuję.

Odpowiedz

6

Poszukuje Cię do użycia obiektu z instancją Course samo podanie ID kursu nie działa.

Można zrobić:

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

Jak Pełna wspomina, jeśli wiesz, że już istnieje jednostka może po prostu ustawić go bez odnośnika db wykonując:

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

Teraz jest wyraźniejszy, dziękuję , naprawdę;) –

+0

Zajęło mi to kilka godzin, aby dostać się do tego punktu, a twoje rozwiązanie było naprawdę pomocne. Dzięki –

+1

Właściwie byłoby lepiej użyć '$ this-> getDoctrine() -> getManager() -> getReference ('Namespace: Course', 5);' bez wyszukiwania w db! – Full

Powiązane problemy