0

假设我的设置是

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

如何在有学生的 DQL 教师中进行选择?我想它会像

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

但我知道count(t.students) > 0错了……那我用什么?

更新

现在什么是多对多自引用关系?用户可以是教师或学生或两者兼而有之......下面的代码......获取有学生的用户的 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;
4

1 回答 1

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

谢谢

于 2010-07-24T04:39:49.313 回答