Что такое PersistentCollection?

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

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

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

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

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

  • Нормально ли иметь постоянные коллекции с простым "Многим-многим"?
  • Как могут отображаться эти коллекции? (а не   обычный ArrayCollection)
  • Наконец, что такое использование       Постоянная коллекция?

Ответ 1

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, который позволяет взаимодействовать с базой данных, не сохраняя ее, только очищая.

Ответ 2

Чтобы добавить к описанию Serrar.

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, чтобы просмотреть комментарии, связанные с текущей страницей. Это предполагает, что у вас есть объект страницы. Создание нового объекта ArrayCollection в конструкции важно:  Отображение привязок к метаданным

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