9

我有两个模型叫做Personand Tag。一个人有许多标签,标签主键是person_idtagPerson $person$tag在Doctrine2中)的组合键。

模型中有一个数据字段 ( BLOB),Tag其中包含大量数据。我正在设置一个不需要该字段数据的查询,因此我想设置一个不检索该字段的查询。

我尝试了以下查询:

SELECT c, PARTIAL t.{tag} FROM Contact c LEFT JOIN c.tags

在这里,我得到了一些预期的错误The partial field selection of class Tag must contain the identifier。没问题,我添加联系人字段:

SELECT c, PARTIAL t.{contact,tag} FROM Contact c LEFT JOIN c.tags

但是现在,我在类 Tag 上没有名为 'contact' 的映射字段

Doctrine2 不支持对复合键的部分查询吗?

这是标签类:

/** @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;
}
4

1 回答 1

8

每当执行部分选择时,您都需要包含要从中选择的类的主键。

您实际上并没有详细说明您的“联系人”实体,但我假设该类的主键字段是“id”。如果是这种情况,那么以下查询将满足您的要求:

SELECT c, PARTIAL t.{id, tag} FROM Contact c LEFT JOIN c.tags

这似乎没有记录:(

http://docs.doctrine-project.org/en/latest/reference/dql-doctrine-query-language.html#partial-object-syntax

于 2013-04-25T19:43:36.880 回答