Doctrine2 - using a foreign key column as a normal field
doctrine-orm, foreign-key-relationship, orm, php
Solution
Use the entity proxy:
Entity::setRelatedEntity($entityManager->getReference('RelatedEntity', $relEntId))
Problem
Is there a way to have something like this in doctrine: ``` class Entity { /** * @Column(name="related_entity_id") */ private $relatedEntityId; /** * @ManyToOne(targetEntity="RelatedEntitiy") * @JoinColumn(name="related_entity_id", referencedColumnName="id") */ private $relatedEntity; } ``` What I want to do I do something like this: call Entity::setRelatedEntityId($someId), and persist the entity, and have the entity return the related entity by calling Entity::getRelatedEntity(). The related entity is selected from a table which will be strictly limited and it will never dynamically grow at runtime, so there is a finite number of related entity ids. At the time of creating a new Entity, I'd like to set the related entity id, but without having to fetch the whole related entity from the database. As far as I could test this, it does not work, because if I set the relatedEntityId but not the relatedEntity, Doctrine automatically sets the related_entity_id column to null, since basically no relationship has been established. I've tried to do something like this also: remove the relatedEntityId property, and use ``` Entity::setRelatedEntity(new RelatedEntity($relEntId)) ``` the constructor of the RelatedEntity will set the id, but not other values. I do not want to persist the RelatedEntity (it's values are already set in the DB for the given $relEntId), but this time Doctrine signals an error at flush, because it has an unpersisted entity. Basically, what I want to do is create a relationship without knowing anyhing but the Id of the related entity. If there is some other way this can be done, please share. Thanks in advance EDIT: I've found a workaround. Since the RelatedEntities will be a limited set of immutable objects, I've done the following: - use the entityManager to find all RelatedEntities; - inject the list to the object that will be creating new Entities - when creating a new Entity, select one of the RelatedEntities from the list as its RelatedEntity I'll leave the question open for a day or two, just in case somebody comes up with something better.