Есть Entity Treatment, имена свойств которой отличаются от имен столбцов таблицы в БД.
При селект запросе выбираются все поля, кроме поля "contract", которое является внешним ключом к справочнику.
Вот оно:
/**
* @var \Medcard\Entity\Contract
*
* @ORM\ManyToOne(targetEntity="Medcard\Entity\Contract")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="contract_id", referencedColumnName="id")
* })
*/
private $contract;
Я использовал для выборки следующий запрос:
$data = $this->entityManager->createQuery('SELECT e FROM ' . self::ENTITY_NAME
. ' e WHERE e.medcard = ?1')
->setParameter(1, $id)->getSingleResult(\Doctrine\ORM\AbstractQuery::HYDRATE_ARRAY);
Но он не возвращал мне поле contract.
Тогда я переписал так:
$data = $this->entityManager->createQuery('SELECT e, c.id as contract FROM '
. self::ENTITY_NAME . ' e ' . ' JOIN e.contract c WHERE e.medcard = ?1')
->setParameter(1, $id)->getSingleResult(\Doctrine\ORM\AbstractQuery::HYDRATE_ARRAY);
Но мне кажется, использовать в данном случае JOIN это лишнее, ведь в treatment и так есть значение, которые я хочу выбрать (contract_id).
Подобные проблемы есть с другими Entity.
Мне нужно просто получить все данные из таблицы, но с именами полей, которые соответствуют свойствам в Entity, а не БД, что бы в дальнейшем можно было выполнить гидратацию. (Т.е. не contract_id, a contract, medcard_id -> medcard)
Если получать объект вместо массива, а потом экстрактить, то возвращается объект contract, а не его ID, к тому же возвращается еще много ненужных объектов, связанных с данной Entity.