2012-12-28 46 views
1

每次我嘗試使用其id來獲取特定教室內的所有用戶時,它不會返回任何內容。我有一個與user_id和class_id聯接表Symfony2 Array Collection不會返回任何內容

Classroom.orm.yml 
    id: 
    classID: 
     column: class_id 
     type: integer 
     generator: { strategy: AUTO } 
    fields: 
    manyToMany: // <---- this is the map 
    classUsers: 
     targetEntity: acme\UserBundle\Entity\User 
     mappedBy: userClassrooms 
    oneToMany: 
    classAnnouncement: 
     targetEntity: acme\ClassroomBundle\Entity\Announcements 
     mappedBy: announcementClass 
    manyToMany: 
    classLesson: 
     targetEntity: acme\ClassroomBundle\Entity\Lessons 
     inversedBy: lessonClass 
     joinTable: 
     name: classroom_lessons 
     joinColumns: 
      fk_class_id: 
      referencedColumnName: class_id 
     inverseJoinColumns: 
      fk_lesson_id: 
      referencedColumnName: lesson_id 


User.orm.yml 

acme\UserBundle\Entity\User: 
    type: entity 
    table: reg_user 
    id: 
    userID: 
     column: user_id 
     type: integer 
     generator: { strategy: AUTO } 
    fields: 
... 
    manyToMany: //this is the map 
    userClassrooms: 
     targetEntity: acme\ClassroomBundle\Entity\Classroom 
     inversedBy: classUsers 
     joinTable: 
     name: classroom_users 
     joinColumns: 
      fk_user_id: 
      referencedColumnName: user_id 
     inverseJoinColumns: 
      fk_class_id: 
      referencedColumnName: class_id 

Classroom.php 
... 
public function __construct() 
    { 
     $this->classUsers = new ArrayCollection(); 
//other array collections 
     $this->classAnnouncement = new ArrayCollection(); 
     $this->classLesson = new ArrayCollection(); 
    } 
    public function addClassUser(\acme\UserBundle\Entity\User $classUsers) 
    { 
     $this->classUsers[] = $classUsers; 
      return $this; 
    } 

    public function removeClassUser(\acme\UserBundle\Entity\User $classUsers) 
    { 
     $this->classUsers->removeElement($classUsers); 
    } 
    public function getClassUsers() 
    { 
     return $this->classUsers; 
    } 

Controller 
public function StudentClassroomAction($classID) 
    { 

     $class_repository = $this->getDoctrine()->getRepository('acmeClassroomBundle:Classroom'); 
     $classroom = $class_repository->find($classID); //im sure this stores an object of classroom 
     $userinfo = $classroom->getClassUsers(); //THIS IS THE THING!!! 

//first i tried rendering it in twig. still gives me nothing 
    /*return $this->render('acmeClassroomBundle:Classrooms:Student.html.twig',array(
      'classroom' => $classroom, 
      'classuser' => $userinfo)); 
      */ 
//I change it to response to know if something is stored in $userinfo it returns an empty page rather than an error.Then $userinfo still has no object stored. 
     return new response($userinfo); 


    } 


tbl: classroom_users 
______________________________ 
| fk_user_id | fk_class_id| 
------------------------------- 
|  1  |  1  | 
|  2  |  1  | 
------------------------------- 

有誰可以告訴我,最新怎麼了?我真的不能確定哪個是特別的,因爲它不會給我返回任何錯誤。

+2

您可以檢查您的映射?通過'php app/console do:sch:va' 你應該得到 '[Mapping] OK - 映射文件是正確的。 [數據庫] OK - 數據庫模式與映射文件同步。' – l3l0

+0

感謝您的支持。我不知道有檢查映射的命令。 – Teffi

回答

0

這聽起來很愚蠢,但yaml映射格式不正確,這就是爲什麼映射不能被讀取。

修復classroom.orm.yml到

Classroom.orm.yml 
manyToOne: 
classCreatedBy: 
    targetEntity: acme\UserBundle\Entity\User 
    joinColumn: 
    name: fk_created_by 
    nullable: false 
    referencedColumnName: user_id 
oneToMany: 
classAnnouncement: 
    targetEntity: acme\ClassroomBundle\Entity\Announcements 
    mappedBy: announcementClass 

manyToMany: //changed this one 
classUsers: 
    targetEntity: acme\UserBundle\Entity\User 
    mappedBy: userClassrooms 

classLesson: 
    targetEntity: acme\ClassroomBundle\Entity\Lessons 
    inversedBy: lessonClass 
    joinTable: 
    name: classroom_lessons 
    joinColumns: 
     fk_class_id: 
     referencedColumnName: class_id 
    inverseJoinColumns: 
     fk_lesson_id: 
     referencedColumnName: lesson_id