Intereting Posts
Как проверить конкретный тип объекта в PHP Что такое хороший интерфейс для отображения на нескольких языках Мягкое удаление Каскадирование с помощью Laravel 5.2 как сохранить данные, которые пользователь вводил на странице формы после выполнения скрипта? Функция PHP mail () возвращает false, но без ошибок Загрузка изображения в базу данных mysql с использованием PHP Как показать предварительный просмотр изображения с помощью jquery перед формой submit в div PHP Phpmyadmin не выполняется, но работают другие скрипты php Как получить узлы на первом уровне с помощью PHP DOMDocument? как активировать динамическое расширение SOAP, CURL, OPENSSL? Алгоритм Facemash Функция PHP, чтобы узнать количество параметров, переданных в функцию? Использование PHP для удаления выбранного элемента из раскрывающегося списка, среди прочих Как отменить бит байта? Исчерпание памяти imagejpeg

Нужна помощь в понимании доктрины многих ко многим саморекламным кодам

У меня возникли проблемы с расшифровкой этого блока кода из документации доктрины

/** @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://img.ruphp.com/doctrine/tumblr_l5uwg3VH171qbp1vqo1_r1_500.png

но если я использую тот же метод, … ниже – то, что я получаю

alt text http://img514.imageshack.us/img514/2918/snagprogram0000.png

ОБНОВИТЬ

Я разъясню свой вопрос. В принципе, я не понимаю, как противоположность myFriends , friendsWithMe . как я понимаю смысл этого кода и, что более важно, знаю, как правильно кодировать такие отношения.

    я пытаюсь ответить на мой вопрос, я все еще довольно размываюсь с этим, надеюсь, что кто-то действительно сможет дать лучший ответ,

    так что 1, чтобы ответить на вопрос abt, как я могу получить с помощью $friendsWithMe

    в основном, я начал с «декодирования» более простого, более распространенного, от многих до многих двунаправленных отношений.

    • 1 пользователь может быть во многих группах
      • $ User-> группы
    • 1 группа может иметь много пользователей
      • $ Группы-> Пользователи

    очень прямолинейно. но как это имеет смысл в SQL?

    alt text

    код для реализации

     # 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

    в коде

     # 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 и остальную часть класса?

    1-й взгляд на нижнюю ноту.

    alt text

    неясно, без большого и глубокого мышления, за 2 дня. Я полагаю

    то как практика, как я могу создать много-много самореферентных отношений с нуля?

    пример, над которым я собираюсь работать, это … хм, довольно дерьмовый, я думаю, но, я попробую 🙂 … 1 пользователь / ученик может иметь много учителей. 1 учитель может иметь много пользователей / студентов. 1 пользователь может быть учителем и студентом здесь. Вы знаете, как на форумах, таких как эти, когда вы отвечаете на некоторые вопросы, вы учитель. когда вы спрашиваете, и вы студент

    ERD будет выглядеть так:

    alt text

    некоторый код для выбора, учащиеся учителей, учителя студентов

     # 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 

    наконец я это сделал! давайте протестируем его … erm я получаю

    Неустранимая ошибка: «Объекты \ Пользователь» класса не найдены в D: \ ResourceLibrary \ Frameworks \ Doctrine \ tools \ sandbox \ index.php в строке 61

    когда я пытаюсь сделать

     $user = new User; 

    zzz …

    я также написал блог об этом вопросе, и мое объяснение на моем tumblr

    Вопрос в том, что таблица M: N:

    • friend_user_id
    • Идентификатор пользователя

    с двумя пользователями с идентификаторами 1 и 2. У вас есть только:

    friend_user_id = 1 и user_id = 2

    или оба

    friend_user_id = 1 и user_id = 2 user_id = 2 и friend_user_id = 1

    Вы можете реализовать оба способа, в зависимости от того, как вы кодируете управление коллекцией владеющей стороны.

    Случай A:

     public function addFriend(User $friend) { $this->myFriends[] = $friend; } 

    Случай B:

     public function addFriend(User $friend) { $this->myFriends[] = $friend; $friend->myFriends[] = $this; // php allows to access private members of objects of the same type }