Учение 2 сущности с отношениями один ко многим - PullRequest
2 голосов
/ 16 апреля 2011

Я пытаюсь получить аннотацию с отношением один ко многим, но как только я использую соединение, я получу следующие данные:

entities\Topic
    id    = 1            // integer
    title = "example"    // string
    comments             // entities\Comment = oneToMany
        id   = 1                    // integer
        comment = "first comment"   // string
        topic                       // entities\Topic = manyToOne
            id    = 1 // again..
            title = "example"

Почему доктрина извлекает отношение manyToOne внутри комментариев, когда я присоединяюсь к комментариям по темам? Это мой запрос:

$this->em->createQueryBuilder()
         ->from('Entities\Topic', 't')
         ->select("t, c")
         ->leftjoin("t.comments", 'c')
         ->where('t.id = :id')
         ->setParameter('id', 1)
         ->getQuery()->getSingleResult();

Разве свойство темы не должно быть нулевым или хотя бы пустым массивом arrayCollection?

Другое дело:

Почему я возвращаю PersistentCollection в качестве комментариев, когда я указываю, что комментарии являются arrayCollection? Всегда ли мне нужно использовать unwrap для PersistentCollection, прежде чем я смогу пройти через него?

1 Ответ

3 голосов
/ 16 апреля 2011

Первый бит - скорее всего, он заполняет тему, потому что в ней уже есть данные.Если бы данные еще не были в наличии, у вас, скорее всего, был бы прокси-объект.Это никогда не будет null, потому что null будет неправильным (комментарий имеет тему).

Что касается ArrayCollection / PersistentCollection, вы можете спокойно игнорировать это различие.Я не знаю деталей реализации, но в основном EM возвращает вещи в PersistentCollections, которые, как я полагаю, играют роль в управлении сущностями в коллекции.Если вы создаете коллекцию, вы используете ArrayCollection.Извините, я не могу быть более конкретным здесь, но суть в том, что вы, вероятно, должны просто думать о любых PersistentCollections, которые вы получаете от EM, как о «коллекции»

...