php – 需要帮助理解Doctrine多对多的自引用代码
我无法从
doctrine documentation解密这段代码
/** @Entity */ class User { // ... /** * @ManyToMany(targetEntity="User",mappedBy="myFriends") */ private $friendsWithMe; /** * @ManyToMany(targetEntity="User",inversedBy="friendsWithMe") * @JoinTable(name="friends",* joinColumns={@JoinColumn(name="user_id",referencedColumnName="id")},* inverseJoinColumns={@JoinColumn(name="friend_user_id",referencedColumnName="id")} * ) */ private $myFriends; // ... } 下面是我如何破译一对多的双向关系 alt text http://29.media.tumblr.com/tumblr_l5uwg3VH171qbp1vqo1_r1_500.png 但如果我使用相同的方法,…下面是我得到的 alt text http://img514.imageshack.us/img514/2918/snagprogram0000.png UPDATE 我要澄清我的问题.基本上,我不明白myFriends,friendsWithMe的反面是怎样的.我如何理解这些代码,更重要的是知道如何自己编写这样的关系.
我试着回答我的问题,我仍然很模糊,希望有人能真正给出更好的答案, 所以第1回答问题abt我如何得到$friendsWithMe 基本上,我开始“解码”一个更简单,更常见,多对多的双向关系. > 1个用户可以在多个组中 > $user->组 > 1组可以有很多用户 > $group->用户 很直接.但这在SQL中有什么意义呢? 代码实现 # select groups user is in select group_id from users_groups where user_id = 1 #select users of group select user_id from users_groups where group_id = 1 现在到了实际的模型……在SQL中 在代码中 # select friends of given user # $user->myFriends select friend_id from friends where user_id = 1; # select users that are friends of given user # $user->friendsWithMe select user_id from friends where friend_id = 1; 啊哈!选择作为给定用户的朋友的用户.所以这就是我如何获得$friendsWithMe.然后填补反转的& mappedBy&班上的其他人? 第一眼看下注. 没有那么多深思熟虑,不清楚,2天.我猜 然后作为练习如何从头开始创建多对多的自引用关系? 我打算工作的例子是……嗯,我觉得很蹩脚但是,我会尝试:) … 1位用户/学生可以有很多老师. 1名教师可以有很多用户/学生. 1位用户可以是这里的老师和学生.你知道在这些论坛中,当你回答某些问题时,你就是老师.当你问,你是学生 ERD看起来像 一些代码可供选择,学生的老师,学生的老师 # select students of teacher # $teacher->students select student from teacher_student where teacher = 1; # select teachers of student # $student->teachers select teacher from teacher_student where student = 2; 好的,学说部分? /** @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",* inverseJoinColumns={@JoinColumn(name="student",referencedColumnName="id")} * ) */ private $students; /** * @ManyToMany(targetEntity="User",mappedBy="students") */ private $teachers; } 它为我生成了这个表 # users CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(30) NOT NULL,PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 #teachers_students CREATE TABLE `teachers_students` ( `teacher` int(11) NOT NULL,`student` int(11) NOT NULL,PRIMARY KEY (`teacher`,`student`),KEY `student` (`student`),CONSTRAINT `teachers_students_ibfk_2` FOREIGN KEY (`student`) REFERENCES `users` (`id`),CONSTRAINT `teachers_students_ibfk_1` FOREIGN KEY (`teacher`) REFERENCES `users` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 最后我做到了!让我们测试吧……我正在接受
当我尝试做一个 $user = new User; zzz …… 我也在这个问题和我对tumblr的解释上写了博客 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |