我有两个模型,分别是Person
和Tag
。一个人有多个标签,标签主键是person_id
和tag
的组合键(原则2中的Person $person
和$tag
)。
在Tag
模型中有一个数据字段(BLOB
),其中包含大量数据。我正在设置一个不需要该字段中数据的查询,因此我想设置一个不检索该字段的查询。
我尝试使用以下查询:
SELECT c, PARTIAL t.{tag} FROM Contact c LEFT JOIN c.tags
在这里,我得到了一些预期的错误 类标签的部分字段选择必须包含标识符。没问题,我添加联系人字段:
SELECT c, PARTIAL t.{contact,tag} FROM Contact c LEFT JOIN c.tags
但是现在,我得到类标签上没有名为"联系人"的映射字段。
原则 2 不支持对组合键进行部分查询吗?
下面是 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
这似乎没有记录在案:(
http://docs.doctrine-project.org/en/latest/reference/dql-doctrine-query-language.html#partial-object-syntax