Я хотел бы понять, почему я не могу получить доступ к полю id в моей сущности, когда это ссылка для связанного идентификатора. Я прочитал, что это так, но я хотел бы знать, почему это дано, наличие фактического getter, который должен вытащить данные, которые IS в базе данных.
В частности, это проблема, потому что мне нужно запросить мой объект BASED на этом id, например
$article = $articleRepo->findOneByViewVersionId($view->getVersion()->getId());
У меня есть объект Article
, который указывает на объект ViewVersion
с однонаправленной ассоциацией OneToOne (поскольку viewVersion может указывать на множество разных типов содержимого, я не могу это сделать как двунаправленный … Я не знаю как это другой вопрос, который я задал ). Это сохраняется в базе данных, и в базе данных устанавливается viewVersionId
(я вижу его там в этом поле). Когда я получаю объект из базы данных, я могу сбросить сущность и увидеть ВСЕ поля, но viewVersionId
сообщается как NULL, хотя он имеет значение 29 в базе данных!
class Article { /** * @ORM\OneToOne(targetEntity="\Gutensite\CmsBundle\Entity\View\ViewVersion") * @ORM\JoinColumn(name="viewVersionId", referencedColumnName="id") */ protected $viewVersion; protected $viewVersionId; public function getViewVersion() { return $this->viewVersion; } public function getViewVersionId() { return $this->viewVersionId; } }
Если я получаю объект и пытаюсь распечатать viewVersionId напрямую, он имеет значение null:
// hard coded fetch for id 14 since $articleRepo->findOneByViewVersionId(29) doesn't work $content = $articleRepo->find(14); print('<h1>View version ID: '.$content->getViewVersionId().' (= NULL) </h1>'); print('<h1>View version ID: '.$content->getViewVersion()->getId().'(= 29) </h1>'); \Doctrine\Common\Util\Debug::dump($content, 1); // this prints out all the fields but the viewVersionId is NULL object(stdClass)#5095 (14) { ["__CLASS__"]=> string(38) "Gutensite\ArticleBundle\Entity\Article" ["content"]=> string(10) "Article 14" ["profileId"]=> NULL ["id"]=> int(14) ["lockVersion"]=> int(1) ["siteId"]=> NULL ["time"]=> int(1399935757) ["timeMod"]=> NULL ["timeDelete"]=> NULL ["flagDelete"]=> bool(false) ["userId"]=> NULL ["userIdMod"]=> NULL ["viewVersion"]=> string(43) "Gutensite\CmsBundle\Entity\View\ViewVersion" ["viewVersionId"]=> NULL }
Итак, почему я не могу получить доступ к значению viewVersionId напрямую, если данные сохраняются в моей базе данных? Я предполагаю, что это из-за ассоциации OneToOne, но в этом случае данные находятся в моей сущности, и у меня есть getter, так почему же это не работает?
$viewVersionId
в вашей сущности вообще не отображается ORM. Вам нужно добавить правильную аннотацию, чтобы она была заполнена, когда Doctrine извлекает Entity из базы данных.
Пытаться:
/** * @ORM\Column(type="integer") */ pirvate $viewVersionId;