У меня есть две модели под названием Person
и Tag
. Один человек имеет много тегов, а первичный ключ тега представляет собой составной ключ person_id
и tag
( Person $person
и $tag
в Doctrine2).
В модели Tag
есть поле данных ( BLOB
) с большим количеством данных. Я настраиваю запрос, который не требует данных из этого поля, поэтому я хочу настроить запрос, который не извлекает это поле.
Я попробовал следующий запрос:
SELECT c, PARTIAL t.{tag} FROM Contact c LEFT JOIN c.tags
Здесь я получаю несколько ожидаемую ошибку . Частичный выбор поля класса Tag должен содержать идентификатор . Нет проблем, я добавляю поле контакта:
SELECT c, PARTIAL t.{contact,tag} FROM Contact c LEFT JOIN c.tags
Но теперь, я получаю Нет сопоставленного поля с именем «контакт» в теге класса .
Doctrine2 не поддерживает частичные запросы на составные клавиши?
Вот класс Tag:
/** @Entity @Table(name="tag") **/ class Tag { /** @Id @ManyToOne(targetEntity="Contact",inversedBy="tags") @var Contact **/ protected $contact; /** @Id @Column(type="string",length=10,nullable=false) @var string **/ protected $tag; /** @Column(type="blob") **/ protected $data; }
Всякий раз, когда вы выполняете частичный отбор, вам нужно включить первичный ключ выбранного класса.
Вы на самом деле не детализировали свой объект «Контакт», но я предполагаю, что поле первичного ключа этого класса «id». Если это так, то следующий запрос будет иметь то, что вам нужно:
SELECT c, PARTIAL t.{id, tag} FROM Contact c LEFT JOIN c.tags
Это, похоже, не документировано 🙁