我在我的存储库中有查询,它返回数组结果:
$result = $qb
->select('partial u.{id, username, email, lastLogin}', 'partial groups.{id}')
->leftJoin('u.groups', 'groups')
->getQuery()
->getArrayResult();
当我在AngularJS应用程序上请求此查询时,我得到下一个结果:
[
{"id":1,
"username":"Sergio Ivanuzzo",
"email":"my_email@domain.com",
"lastLogin":null,
"groups":[{"id":1}]
}
]
由于groups
包含对象数组,因此我无法在可编辑指令中解析它们(未选中复选框):
<span
data-pk="{{ user.id }}"
editable-checklist="user.groups"
e-ng-options="g.id as g.name for g in groups"
e-form="rowform">
{{ User.showGroups(user) }}
</span>
当groups
属性包含类似[1,2,3]指令的内容时(正常检查复选框)。
因此,为了解决这个问题,我要从响应中解析每个User对象:
angular.forEach(response.data, function(user) {
var groups = [];
angular.forEach(user.groups, function(group) {
groups.push(group.id);
});
user.groups = groups;
});
$scope.users = response.data;
我觉得,我可以避免这种解决方法,如果我可以为每个用户返回groups
作为数字序列。我怎样才能做到这一点?也许更好的方式存在?
如果您需要额外的数据,请告诉我们!非常感谢您的帮助
答案 0 :(得分:1)
您可以使用过滤器保存原始数据,例如
$scope.toArray = function(groupsAsObjects) {
var groups = [];
angular.forEach(groupsAsObjects, function(group) {
groups.push(group.id);
});
return groups;
};
并且
<span
data-pk="{{ user.id }}"
editable-checklist="user.groups | toArray"
e-ng-options="g.id as g.name for g in groups"
e-form="rowform">
{{ User.showGroups(user) }}
</span>
或者将完整的对象数组重新映射为如下数组:
$scope.toArray = function(obj, addKey) {
if (!obj)
return obj;
if (addKey === false) {
return Object.keys(obj).map(function(key) {
return obj[key];
});
} else {
return Object.keys(obj).map(function(key) {
return Object.defineProperty(obj[key], '$key', {
enumerable: false,
configurable: true,
value: key
});
});
}
};