我做了这个查询:
$language = $this->getDoctrine()->getManager()
->createQuery('SELECT c FROM AVCMediasBundle:Language c WHERE c.LangCode IS NOT NULL ORDER BY c.LanguageName')
->getResult();
这个查询返回给我这个表:
id langCode languageName countryName ...
1 en english England ...
2 en english United States ...
3 en english Australia ...
4 es spanish Spain ...
5 es spanish Mexico ...
6 es spanish Argentina ...
在我的树枝上有一个 {{ dump }}
,我明白了:
array:6 [
0 => Langue {
-id: 15
-langCode: "en"
-languageName: "English"
-countryName: "England"
}
1 => Langue {
-id: 1
-langCode: "en"
-languageName: "English"
-countryName: "United States"}
2 => Langue {
-id: 3
-langCode: "en"
-languageName: "English"
-countryName: "Australia"
}
3 => Langue {
-id: 6
-langCode: "es"
-languageName: "Spanish"
-countryName: "Spain"
}
4 => Langue {
-id: 9
-langCode: "es"
-languageName: "Spanish"
-countryName: "Mexico"
}
5 => Langue {
-id: 2
-langCode: "es"
-languageName: "Spanish"
-countryName: "Argentina"
}
]
我现在需要的是将每个实体分组 countryName
具有相同的 languageName
如何像这样对象数组:
Array [
0 => English
Entity Langue
=> England
-id: 15
-langCode: "en"
-languageName: "English"
-countryName: "England"
=> United States
-id: 1
-langCode: "en"
-languageName: "English"
-countryName: "United States"}
=> Australia
...
1 => Spanish
Entity Langue
=> Spain
-id: 6
-langCode: "es"
-languageName: "Spanish"
-countryName: "Spain"
=> Mexico
-id: 9
-langCode: "es"
-languageName: "Spanish"
-countryName: "Mexico"
=> Australia
...
]
DQL有可能吗?还是有些循环?谢谢你的帮助
2 回答
如果在实体之间 Build 关系会好得多 . 这样,Doctrine会为您处理这些问题 .
例如,如果您有两个实体AVCMediasBundle:语言和AVCMediasBundle:国家,您可以 Build 他们之间的关系oneToMany(语言有许多国家和国家一种语言),并使用适当的getter轻松访问具有语言的国家/地区 . 当然,这只是一个例子,您的应用程序和关系可能比呈现的更复杂 . 有关的更多信息here
如果这不是一个选项,循环应该做的伎俩:
它会给你一些类似的东西
它并不完全是你想要的形式(不确定你能得到那种形式),但我认为它有同样的目的 .
你可以用简单的foreach循环来完成它