2010-07-24 29 views
0

假設我的設置是主義DQL:生兒育女/關係FK表中選擇實體

Teachers (id, name) 
Students (id, name, teacher [FK]); 

如何選擇在有學生DQL老師?我想這將是這樣

select t FROM Entities\Teachers t WHERE count(t.students) > 0 

,但我知道count(t.students) > 0是錯誤的...不那麼我用什麼?

UPDATE

現在什麼是多對多的自我引用關係?用戶可以成爲教師或學生或兩者...下面的代碼...什麼是DQL獲取有學生的用戶?

/** @Entity @Table(name="users")) */ 
class User { 
    /** 
    * @Id @Column(type="integer") 
    * @GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 
    /** 
    * @Column(type="string", length="30") 
    */ 
    private $name; 
    /** 
    * @ManyToMany(targetEntity="User", inversedBy="teachers") 
    * @JoinTable(name="Teachers_Students", 
    *    joinColumns={@JoinColumn(name="teacher", referencedColumnName="id")}, 
    *    inverseJoinColumns={@JoinColumn(name="student", referencedColumnName="id")} 
    *    ) 
    */ 
    private $students; 
    /** 
    * @ManyToMany(targetEntity="User", mappedBy="students") 
    */ 
    private $teachers; 

回答

1

在這種情況下,您可以使用連接。

select t FROM Entities\Teachers as t 
innerjoin Entities\Students as s on t.id = s.teacher 

如果您可以設置您的基地,如下所示,那麼你可以很容易地處理你的情況。從我的經驗來看,我知道教義可以以最好的方式處理多對多的關係。

$this->hasMany('User as Students', array(

     'local'  => 'id', 

     'foreign' => 'student_id', 

     'refClass' => 'UserToStudents', 

     'onDelete' => 'CASCADE')); 

$this->hasMany('User as Teachers', array(

     'local'  => 'id', 

     'foreign' => 'teacher_id', 

     'refClass' => 'UserToTeachers', 

     'onDelete' => 'CASCADE')); 

感謝

+0

好了,現在我在做什麼的自參考實體。看我的更新 – 2010-07-24 07:00:47

+0

我已更新我的評論。請讓我清楚知道你還想知道什麼。 – Muhit 2010-07-24 07:28:48

+0

嗯...我不熟悉這個(但是這是從教條1.2?因爲我使用2.0)。代碼應該去哪裏?我在哪裏可以閱讀文檔或任何此類? – 2010-07-24 10:44:58