tôi đưa ra một thử lúc trả lời câu hỏi của tôi, tôi vẫn còn khá mờ với điều này, hy vọng ai đó thực sự có thể cung cấp một câu trả lời tốt hơn,
nên 1 trả lời câu hỏi abt làm thế nào để lấy được với $friendsWithMe
về cơ bản, tôi bắt đầu với "giải mã" một mối quan hệ hai chiều, đơn giản hơn, phổ biến hơn.
- 1 người sử dụng có thể ở nhiều nhóm
- 1 nhóm có thể có nhiều người sử dụng
rất thẳng về phía trước. nhưng điều này có ý nghĩa như thế nào trong SQL?
mã để thực hiện
# 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
nay đến mô hình thực tế ... trong SQL
trong mã
# 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;
ah ha! chọn người dùng là bạn của người dùng đã cho. vì vậy đây là cách tôi nhận được $friendsWithMe
. sau đó điền vào inversedBy
& mappedBy
& phần còn lại của lớp học?
Cái nhìn đầu tiên ở ghi chú dưới cùng.
không rõ ràng mà không cần quá nhiều và suy nghĩ sâu sắc, abt 2 ngày. tôi đoán
sau đó làm cách thực hành làm cách nào để tạo nhiều mối quan hệ tự tham chiếu từ đầu?
ví dụ tôi sẽ làm việc là ... hmm, khá crappy tôi nghĩ nhưng, tôi sẽ thử :) ... 1 người dùng/sinh viên có thể có nhiều giáo viên. 1 giáo viên có thể có nhiều người dùng/sinh viên. 1 người dùng có thể là giáo viên và sinh viên tại đây. u biết như trong các diễn đàn như thế này, khi bạn trả lời một số câu hỏi, bạn là giáo viên. khi u hỏi, u là một sinh viên
ERD sẽ trông giống như
một số mã để lựa chọn, học sinh của giáo viên, giáo viên sinh viên
# 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;
ok, phần thuyết ?
/** @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;
}
mà tạo ra bảng này cho tôi
# 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
cuối cùng tôi thực hiện nó! cho phép kiểm tra nó ... erm tôi đang nhận được
Fatal error: Class 'Entities\User' not found in D:\ResourceLibrary\Frameworks\Doctrine\tools\sandbox\index.php on line 61
khi tôi cố gắng để làm một zzz
$user = new User;
...
tôi cũng đã viết blog abt câu hỏi này và Giải thích của tôi trên của tôi tumblr
$ user = new User(); – ruipacheco
+1 Để hiểu rõ câu hỏi và nỗ lực trong việc chuẩn bị tài liệu nguồn bổ sung – calumbrodie
Xin chào. Tôi có vấn đề với học thuyết với quan hệ này. Khi tôi thêm các mục vào loại bộ sưu tập đó, hãy xóa và sau đó loại bỏ tất cả chúng và tuôn ra một lần nữa, tôi nhận được 'Lớp 'Doctrine \ ORM \ Persisters \ ManyToManyPersister' không được tìm thấy trong chuỗi cấu hình không gian tên'. Khi tôi xóa các mục, nhưng hãy để ít nhất một thứ hoạt động hoàn hảo. Bạn có thể kiểm tra hành vi này cho tôi không? và nếu bạn không nhận được bất kỳ vấn đề nào về phiên bản của học thuyết bạn đang sử dụng? Tôi sẽ biết ơn. –