Доктрина: Как мне добавить элементы в отношения - PullRequest
4 голосов
/ 22 июля 2010

я думаю, что мой вопрос не ясен, но я пытаюсь проиллюстрировать мою точку зрения здесь. Предполагая, что у меня есть отношения многие ко многим, которые ссылаются на себя, где пользователь может быть учителем (скажем, вы отвечаете на SO), а учитель может быть студентом (вы можете отвечать на вопросы, но также можете задавать вопросы).

namespace Entities;
/** @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;

    function getName() {
      return $this->name;
    }
    function setName($name) {
      $this->name = $name;
    }
    function getStudents() {
      return $this->students;
    }
    function getTeachers() {
      return $this->teachers;
    }
}

скажем, у меня есть несколько пользователей

$user1 = new User;
$user1->setName("user 1");
$user2 = new User;
$user2->setName("user 2");
$user3 = new User;
$user3->setName("user 3");
$user4 = new User;
$user3->setName("user 4");

и мне нравится устанавливать отношения между учителем и учеником, я читал ссылку на доктрину , видел, что вы можете использовать Collections::add() для добавления элементов в коллекцию

// user1 is a teacher to user2 & 3
$user1->getStudents()->add($user2);
$user1->getStudents()->add($user3);

// user2 is a teacher to user3
$user2->getStudents()->add($user3);

// user4 is a student to user2 
// tests if adding something from the inverse side works
$user4->getTeachers()->add($user2);

но это не так с

Неустранимая ошибка: вызов функции-члена add () для необъекта в D: \ ResourceLibrary \ Frameworks \ Doctrine \ инструменты \ песочница \ index.php по линии 70

как я могу добавить элементы в коллекцию или отношения?

1 Ответ

7 голосов
/ 22 июля 2010

Помните, что переменные вашей коллекции - это просто обычные свойства класса.Это означает, что они будут нулевыми, пока вы их не инициализируете.Типичная вещь, которую нужно сделать, - создать их экземпляр с помощью класса ArrayCollection Doctrine, который позволит вам использовать методы, которые вы описали.

Попробуйте это:

public function __construct()
{
   $this->students = new \Doctrine\Common\Collections\ArrayCollection();
   $this->teachers = new \Doctrine\Common\Collections\ArrayCollection();

}
...