Я пытаюсь понять, как getReference
в классе, который имеет подклассы (в том смысле, что тип наследования установлен в JOINED для родительского класса). Я заметил, что мое приложение выполняет около 70 запросов к БД при каждой загрузке страницы, и проследил эту проблему до класса EntityManager. Виновный код ниже (это в getReference
функция, строка 516 в моей версии, в классе Doctrine \ ORM \ EntityManager)
if ($class->subClasses) {
return $this->find($entityName, $sortedId);
}
Почему Доктрина делает это? Есть ли способ обойти это? Моя сущность, на которую я пытаюсь получить ссылку, находится ниже …
/**
* Advert
*
* @ORM\Table(name="main_advert")
* @ORM\Entity(repositoryClass="API\CoreEntityBundle\Repository\AdvertRepository")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="discriminator", type="integer")
* @ORM\DiscriminatorMap({
* "0" = "Advert",
* "1" = "PropertyAdvert"* })
*/
class Advert
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
//Other stuff...
}
И код, который я пытался получить ссылку, это —
$advert = $this->get('doctrine.orm.default_entity_manager')
->getReference('APICoreEntityBundle:Advert', array('id' => $id));
Единственный способ получить простую ссылку на объект без вызова БД — это создать setId()
функция на Advert
класс, но я знаю, что это не правильный путь.
Любая помощь будет оценена!
РЕДАКТИРОВАТЬ — Хорошо, так что я считать Я нашел решение в getParialReference
функция, чуть ниже getReference
функция в классе EntityManager. Мне все еще интересно, почему менеджер должен сделать find
если у сущности есть дети?
Задача ещё не решена.
Других решений пока нет …