2016-01-29 60 views
0

我有我的資料庫查詢,返回數組結果:Symfony2。在使用外鍵的實體上使用querybuilder時,如何將外鍵的值作爲ID序列返回?

$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":"[email protected]", 
    "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]指令正在工作的內容(複選框被正常檢查)。

所以,解決這個我是從響應解析每個用戶對象:

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

您可以使用過濾器來保留原始數據,如

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