Symfony2的。在带有外键的实体上使用querybuilder时,如何将外键的值作为id序列返回?

时间:2016-01-29 20:15:14

标签: angularjs symfony query-builder

我在我的存储库中有查询,它返回数组结果:

$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作为数字序列。我怎样才能做到这一点?也许更好的方式存在?

如果您需要额外的数据,请告诉我们!非常感谢您的帮助

1 个答案:

答案 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
            });
        });
    }
};