我尝试回答我的问题,但我还是很困惑,希望有人能真正给出更好的答案。
所以首先回答关于如何派生$friendsWithMe
的问题
基本上,我从“解码”一个更简单、更常见的多对多双向关系开始。
非常直接。但这在SQL中有什么意义呢?
![alt text](https://farm5.static.flickr.com/4115/4814734734_7e25414308_b.jpg)
实现代码
# 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 中使用实际模型的部分...
![alt text](https://farm5.static.flickr.com/4121/4814728024_6a86f67930.jpg)
代码中的部分
# 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
的方式。那么如何填充inversedBy
、mappedBy
和类的其余部分呢?
首先看看底部注释。
![alt text](https://farm5.static.flickr.com/4095/4814338717_a95748d80d_b.jpg)
不清楚,需要深入思考,大概需要两天时间。
那么练习一下,如何从零开始创建一个自引用多对多关系?
我将要处理的示例...嗯,我认为很糟糕,但我会尝试 :) ...1个用户/学生可以有多个老师。1个老师可以有多个用户/学生。在这里,1个用户既可以是老师又可以是学生。就像在这样的论坛中,当你回答别人的问题时,你是老师,当你提问时,你是学生
ERD将如下所示
![alt text](https://farm5.static.flickr.com/4136/4814407061_be7dd37d25.jpg)
一些代码来选择教师学生和学生教师。
select student from teacher_student
where teacher = 1;
select teacher from teacher_student
where student = 2;
好的,Doctrine 部分?
class User {
private $id;
private $name;
private $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
最终我做到了!让我们测试一下...嗯,我遇到了问题。
致命错误:在D:\ResourceLibrary\Frameworks\Doctrine\tools\sandbox\index.php的第61行找不到类'Entities\User'
当我尝试执行某个操作时。
$user = new User;
zzz ...
我也在我的tumblr上写了关于这个问题的博客,并给出了我的解释。