2014-10-30 20 views
5

Tôi có một nhiều đến một mối quan hệ giữa các thực thể Dự ánKhóa học vì mỗi khóa học có thể có nhiều dự án rất nhiều dự án có thể liên quan tới cùng một khóa học.Symfony2: Cảnh báo: spl_object_hash() dự kiến ​​tham số 1 là đối tượng, số nguyên cho

Đây là những thực thể của tôi:

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; 

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ỗi xuất hiện khi tôi cố gắng để chèn một dự án mới cho khóa học của tôi, đây là trình tạo hình của tôi:

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

Tôi cố gắng chèn các dữ liệu này tạo đối tượng Project và điền nó với kết quả của biểu mẫu khi bạn có thể xem:

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

Vấn đề nên liên quan đến lệnh $project->setCourse(5); và tôi đã nhìn thấy rằng nếu tôi loại bỏ các mối quan hệ giữa dự án và khóa học lỗi không xuất hiện. Các lỗi biến mất ngay cả khi tôi nhận xét dòng được sử dụng để thiết lập id khóa học, vì vậy tôi nghĩ rằng tôi có một vấn đề với mối quan hệ này nhưng tôi không thể hiểu được nơi.

Tôi vừa đọc các câu hỏi khác như thế này trên stackoverflow nhưng nó không giúp tôi.

Xin cảm ơn trước.

Trả lời

6

Tìm kiếm đối tượng sử dụng đối tượng Course chỉ cần vượt qua ID của khóa học sẽ không hoạt động.

Bạn có thể làm:

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

Như Full đề cập đến nếu bạn biết rằng các thực thể đã tồn tại bạn chỉ có thể thiết lập nó mà không có một tra cứu db bằng cách thực hiện:

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

Bây giờ là rõ ràng hơn, cảm ơn bạn , thực sự;) –

+0

Đã cho tôi vài giờ để đến thời điểm này và giải pháp của bạn thực sự hữu ích. Cảm ơn –

+1

Thực ra sẽ tốt hơn nếu sử dụng '$ this-> getDoctrine() -> getManager() -> getReference ('Không gian tên: Khóa học', 5); ' mà không cần tìm kiếm trong db! – Full

Các vấn đề liên quan