私は私の質問に答えてみます、私はまだこれでかなりぼやけています、誰かが本当により良い答えを与えることができることを願っています、
だから最初に質問に答えるにはどうすればいいですか$friendsWithMe
基本的に、私はより単純で、より一般的な、多対多の双方向の関係を「デコード」することから始めました。
- 1人のユーザーが多くのグループに参加できます
- 1つのグループに多くのユーザーを含めることができます
非常に簡単です。しかし、これは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
。inversedBy
次に、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", referencedColumnName="id")},
* 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
やっとやった!それをテストしましょう...えーと私は得ています
致命的なエラー:61行目のD:\ ResourceLibrary \ Frameworks \ Doctrine \ tools \ sandbox\index.phpにクラス'Entities\User'が見つかりません
私がやろうとすると
$user = new User;
zzz..。
私はまた、この質問と私のtumblrに関する私の説明についてブログに書いています