Что такое PersistentCollection?

У меня есть один-ко-многим в моей базе данных. The редактирование, удаление и добавление элементов, используемых для работы просто отлично. Однако после нескольких изменений (я не могу отследить их все) он больше не работает.
Теперь, когда я получаю объект с отношением "один ко многим", я получаю постоянную коллекцию, представляющую мою коллекцию многогранников. Полагаю, раньше этого не было. В моем конструкторе я создаю новую коллекцию массивов, а не постоянную Коллекция.

Я просмотрел документацию по доктрине, чтобы найти это:

A PersistentCollection представляет коллекцию элементов, которые имеют постоянное состояние.

Я не понимаю, что это значит.

не могли бы вы сказать мне:

  1. нормально ли иметь постоянные коллекции с простым "один ко многим"?
  2. как эти коллекции могут появиться? (а не обычный ArrayCollection)
  3. наконец, что такое использование Постоянная Коллекция?

2 ответов


1.Нормально ли иметь постоянные коллекции с простым "один ко многим"?

нет, что нормально, это ArrayCollection, мне никогда не приходилось использовать PersistentCollection раньше, но у него есть полезная функция, которая может быть полезна в некоторых случаях.

http://www.doctrine-project.org/api/orm/2.1/class-Doctrine.ORM.PersistentCollection.html

  1. как эти коллекции могут появиться? (вместо обычного ArrayCollection)

Они являются коллекциями, и они выглядят так же, как обычный ArrayCollection, имеющий сущности внутри с их типом.

  1. наконец, что такое использование постоянной коллекции?

Как вы можете видеть в документации, PersistentCollection имеет нагрузку функций, которых у ArrayCollection нет, и PersistentCollection использует EntityManager, который позволяет взаимодействовать с базой данных без приходится упорствовать, только краснеть.


чтобы добавить к описанию Серрара.

только коллекции PersistentCollections Примечания подключение к другой сущности. Что верно, если вы правильно сделали отображение/ссылку OneToMany или ManyToOne.

use Doctrine\Common\Collections\ArrayCollection;
public function __construct()
{
    $this->comments = new ArrayCollection();
}
// @ORM\OneToMany(targetEntity="Comments", mappedBy="pages")
private $comments;
public function getComments()
{
    return $this->comments;
}
public function setComments(Comments $comments)
{
    $this->comments = $comments;
}

они не дают вам данные массива.

из приведенного выше примера используйте PageEntity getComments метод для извлечения комментариев, связанных с текущей страницей. Это предполагает, что у вас есть объект page. Настройка нового Объект ArrayCollection в конструкции важен: Отображение Отношений Metadatalink

Доктрина: Класс PersistentCollection - описание в верхней части описывает цель.