Запрос данных из дочерней модели - PullRequest
0 голосов
/ 26 сентября 2011

У меня есть 3 модели, которые я настроил до сих пор в простом приложении, над которым я работаю:

Пока у меня есть эти модели:

  • UserAccountEntity - Таблица верхнего уровня (имеет отношение «один ко многим» с UserAccountEntityStrings)
  • UserAccountEntityStrings - Дочерняя таблица (имеет связь «многие-один» с UserAccountEntity и EavAttributes
  • EavAttributes - Таблица поиска

Когда я запрашиваю данные из моей таблицы верхнего уровня, я получаю схему, информацию об ассоциации для дочерней таблицы. Но я не получаю никаких постоянных данных из дочерней таблицы.

Я ожидал, что это будут результаты из модели верхнего уровня и данные из связанной дочерней модели. Любая помощь в этом с благодарностью.

Примечание, которое может быть полезным, я использую Zend 1.11.10 и Doctrine 2

Вот так выглядит мой запрос:

   $users = $em->createQuery('select u from Fiobox\Entity\UserModule\UserAccountEntity u')->execute();
   Zend_Debug::dump($users[0]);

Это ассоциация в моей модели верхнего уровня:

/**
 *
 * @param \Doctrine\Common\Collections\Collection $property
 * @OneToMany(targetEntity="UserAccountEntityStrings",mappedBy="UserAccountEntity", cascade={"persist","remove"})
 */
private $strings;

Это ассоциации в моей детской модели:

/**
 *
 * @var UserAccountEntity
 * @ManyToOne(targetEntity="UserAccountEntity")
 * @JoinColumns({
 *  @JoinColumn(name="entity_id", referencedColumnName="entity_id")
 * })
 */
private $user;

/**
 * @var EavAttribute
 * @ManyToOne(targetEntity="Fiobox\Entity\EavModule\EavAttributes")
 * @JoinColumn(name="attribute_id", referencedColumnName="attribute_id")
 */
private $attributes;

1 Ответ

1 голос
/ 28 сентября 2011

Вы что-нибудь пробовали?

Доктрина ленивая нагрузка вещи для вас. Ваш var_dump, вероятно, показывает постоянные коллекции прокси-объектов для ваших дочерних объектов. Но если вы получите к ним доступ, они будут загружены автоматически:

<?php
$users = $em->createQuery('select u from Fiobox\Entity\UserModule\UserAccountEntity u')->fetchAll();

foreach($users as $u){
    foreach($u->strings as $s){
        var_dump($s);
    }
}

Если вы знаете, что вам понадобятся все эти дочерние данные, вы можете также принудительно вызвать выборку в вашем DQL:

<?php
$users = $em->createQuery('select u, s from Fiobox\Entity\UserModule\UserAccountEntity u JOIN u.strings s')->fetchAll();
...