У меня есть три объекта: HandsetSubscription, Handset и Subscription.Doctrine DQL возвращает несколько типов объектов
YAML из HandsetSubscription является:
App\SoBundle\Entity\HandsetSubscription:
type: entity
table: handset_subscription
manyToOne:
handset:
targetEntity: Handset
subscription:
targetEntity: Subscription
id:
id:
type: integer
generator: { strategy: AUTO }
options: { unsigned: true }
fields:
amount:
type: integer
nullable: false
options: { default: 0, unsigned: true }
discount:
type: integer
nullable: false
options: { default: 0, unsigned: true }
Запрос:
SELECT hs,s,h
FROM \App\SoBundle\Entity\HandsetSubscription hs
JOIN \App\SoBundle\Entity\Subscription s with s.id = hs.subscription
AND s.mins = 150
AND s.mb = 250
AND s.sms = 150
JOIN \App\SoBundle\Entity\Handset h with h.id = hs.handset
Эти имена классов записей извлекаться:
App\SoBundle\Entity\HandsetSubscription
Proxies\__CG__\App\SoBundle\Entity\Subscription
Proxies\__CG__\App\SoBundle\Entity\Handset
App\SoBundle\Entity\HandsetSubscription
Proxies\__CG__\App\SoBundle\Entity\Handset
App\SoBundle\Entity\HandsetSubscription
Proxies\__CG__\App\SoBundle\Entity\Handset
…
Я ожидаю получить только Судорожные сундуки. Почему я получаю прокси-серверы и подписку?
Добавляя выборку к мобильным телефонам и подписным сопоставлениям и удаляя трубку и подписку из инструкции SELECT в запросе, я получаю только HandsetSubscription, но я хотел бы сделать это с помощью соединений fetch, как указано в руководстве (http://doctrine-orm.readthedocs.org/en/latest/reference/dql-doctrine-query-language.html#joins) ,
UPDATE
Цитата из ссылки писал выше:
Fetch присоединиться по адресу:
<?php
$query = $em->createQuery("SELECT u, a FROM User u JOIN u.address a WHERE a.city = 'Berlin'");
$users = $query->getResult();
Когда доктрина гидраты запрос с выборки присоединиться возвращает класс в FROM на корневом уровне массива результатов. В предыдущем примере возвращается массив экземпляров пользователя и адрес каждого пользователя извлекается и гидратируется в переменную адреса пользователя #. Если вы обращаетесь к адресу Doctrine, вам не нужно ленить загружать связь с другим запросом.
Не 'SELECT hs, s, h', просто' SELECT hs'. Подписка и трубка будут доступны через ссылочный геттер и сеттер – SBH
Таким образом, s и h будут ленивы загружаться. Я хочу, чтобы они были загружены. – madalex
Я довольно shure они не будут. Не выбирайте, но сохраняйте соединение. Попробуйте! – SBH