我有一个教义模型(Assignment),它与另一个模型(Region)有多对一的关系。分配由用户拥有(每个用户一次每个区域只能分配一个分配),我正在尝试使用indexBy来让用户的分配数组由分配区域的ID来键入。但是,我只得到标准的0..n数字键。

当我尝试运行像SELECT am, reg, user FROM Assignment am INDEX BY [...] JOIN am.region reg JOIN am.user user WHERE user.id = ?1这样的DQL查询时,INDEX BY的这些值都不起作用:


region(错误:无效的PathExpression。必须为StateFieldPathExpression。)
region_id(错误:类... \ Assignment没有名为region_id的字段或关联)
region.id(错误:字符串的预期结尾,为“。”)


这可能吗?如果不是,那么在没有User的区域上访问indexBy分配的便捷方法是什么?

最佳答案

我今天正在处理同样的问题。幸运的是,我已经找到了解决方案:)

首先,您必须在ORM映射中声明其他列:

Abdulklarapl\My\EntityA:
type: entity
table: entityA
manyToOne:
    entityB:
        targetEntity: EntityB
        joinColumn:
            name: label_id
            referencedColumnName: id
id:
    id:
        type: integer
        id: true
        generator:
            strategy: AUTO
fields:
    value:
        type: text
    entityB_id:
        type: integer
lifecycleCallbacks: {  }


请注意,我已经将entityB_id声明为字段+通过添加joinColumn子句配置了manyToOne关系

所以现在您可以使用entityB_id作为标量值

$doctrine->getEntityManager()->createQueryBuilder()
        ->select('c')
        ->from('AbdulklaraplMyBundle:EntityA', 'c', 'c.entityB_id')
        ->getQuery()->getResult();


它将返回assoc数组

[
    c.entityB_id: {
        id: "",
        value: ""
        entityB_id: ""
    }
]


您还可以使用AbstractQuery::HYDRATE_ARRAY作为getResult()的参数-它会返回带有数组的assoc数组,而不是对象

关于doctrine-orm - 原则:是否可以通过相关领域进行索引?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12268955/

10-13 03:11