【问题标题】:"No mapped field" when using partial query and composite keys in Doctrine2在 Doctrine2 中使用部分查询和复合键时出现“无映射字段”
【发布时间】:2012-12-12 17:09:23
【问题描述】:

我有两个模型,分别称为 PersonTag。一个人有很多标签,标签主键是person_idtag的组合键(Doctrine2中的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

但是现在,我得到 类标签上没有名为“联系人”的映射字段

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;
}

【问题讨论】:

  • 您是否发现了更多有关此错误@Nils 的信息?
  • @jah,很遗憾没有。我不得不将 Tag 模型拆分为两个对象,以消除庞大的数据块。这样,我也可以在需要数据时选择 TagData 对象。不是一个非常优雅的解决方案,但易于理解和记录。

标签: php doctrine doctrine-orm composite-primary-key


【解决方案1】:

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

您实际上并没有详细说明您的“联系人”实体,但我假设该类的主键字段是“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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 2012-08-10
    • 2012-04-06
    • 1970-01-01
    • 2017-01-30
    • 2016-03-20
    • 1970-01-01
    相关资源
    最近更新 更多