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

次のようにベースをセットアップできれば、非常に簡単にケースを処理できます。私の経験から言えば、doctrine は多対多の関係を最良の方法で処理できることを知っています。

$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 に答える