Что такое PersistentCollection?
У меня есть связь "Один-ко-многим" в моей базе данных. редактирование, удаление и добавление элементов, используемых для работы просто отлично. Однако после нескольких изменений (я не могу их отследить), он больше не работает.
Теперь, когда я получаю объект с отношениями "один-ко-многим", я получаю постоянную коллекцию, чтобы представлять мою коллекцию "Многосторонняя". Полагаю, это было не так. В моем конструкторе я создаю новую коллекцию массивов, а не постоянную коллекцию.
Я просмотрел документацию доктрины, чтобы найти это:
A PersistentCollection представляет собой набор элементов, которые имеют постоянное состояние.
Я не понимаю, что это значит.
Не могли бы вы рассказать мне:
- Нормально ли иметь постоянные коллекции с простым "Многим-многим"?
- Как могут отображаться эти коллекции? (а не обычный ArrayCollection)
- Наконец, что такое использование Постоянная коллекция?
Ответы
Ответ 1
1. Нормально ли иметь постоянные коллекции с простым "Многим-многим"?
Нет, нормальным является ArrayCollection, мне никогда не приходилось использовать PersistentCollection раньше, но у него есть полезная функция, которая может быть полезна в некоторых случаях.
http://www.doctrine-project.org/api/orm/2.1/class-Doctrine.ORM.PersistentCollection.html
- Как могут отображаться эти коллекции? (а не обычный ArrayCollection)
Они также являются коллекциями, они кажутся такими же, как и обычный массив ArrayCollection, содержащий объекты внутри с их типом.
- Наконец, что такое использование стойкой коллекции?
Как вы можете видеть в документации, 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 - описание в верхней части описывает цель.