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