Как Doctrine2 задает значения Id

У меня есть вопрос из любопытства о внутренней работе Доктрины2. Я, как пользователь, вижу действительно чистый и надежный интерфейс, но над капотом должна быть какая-то тяжелая магия.

Когда я создаю простой объект, он выглядит примерно так:

class SimpleEntity { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** * @ORM\Column(type="string") */ protected $title; /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set title * * @param string $title */ public function setTitle($title) { $this->title = $title; } /** * Get title * * @return string */ public function getTitle() { return $this->title; } } 

Как вы заметите, одна вещь явно отсутствует, нет способа установить идентификатор, но тем не менее доктрины заводов возвращают объекты с установленными идентификаторами. Как это может работать? Я попытался просмотреть источник, но где-то потерял трек.

Как можно перезаписать защищенные значения, не входя в иерархию классов?

Solutions Collecting From Web of "Как Doctrine2 задает значения Id"