目前我使用下面的查询:
$claims = ClaimQuery::create('c')
->leftJoinUser()
->withColumn('CONCAT(User.Firstname, " ", User.Lastname)', 'name')
->withColumn('User.Email', 'email')
->filterByArray($conditions)
->paginate($page = $page, $maxPerPage = $top);
不过,我想,然后手动添加列,所以我认为这将只是工作:
foreach($claims as &$claim){
$claim->actions = array('edit' => array(
'url' => $this->get('router')->generate('hera_claims_edit'),
'text' => 'Edit'
)
);
}
return array('claims' => $claims, 'count' => count($claims));
然而返回数据时行走或Symfony2中似乎被剥离自定义数据时,它得到了所有superflous模型数据一起转换成JSON。
什么是手动添加数据这样的正确方法?
为了虚拟列导出到了数组,你可以做它的下一个方法:
/**
* Propel result set
* @var \PropelObjectCollection
*/
$claims = ClaimQuery::create('c')-> ... ->getResults();
/**
* Array of data with virtual columns
* @var array
*/
$claims_array = array_map(function (Claim $claim) {
return array_merge(
$claim->toArray(), // using "native" export function
array( // adding virtual columns
'Email' => $claim->getVirtualColumn('email'),
'Name' => $claim->getVirtualColumn('name')
)
);
}, $claims->getArrayCopy()); // Getting array of `Claim` objects from `PropelObjectCollection`
unset($claims); // unsetting unnecessary object if we have further operations to complete
这个问题的答案在于指定者()方法,因此:
$claims = ClaimQuery::create('c')
->leftJoinUser()
->withColumn('CONCAT(User.Firstname, " ", User.Lastname)', 'name')
->withColumn('User.Email', 'email')
->filterByArray($conditions)
->paginate($page = $page, $maxPerPage = $top)->getResults()->toArray();
然后,你可以修改的要求,这里唯一的问题是,目前的指定者方法不返回虚拟列,所以你将不得不修补方法,包括他们。 (这是PropelObjectCollection类)
最后,我决定将部分分开:
return array(
'claims' => $claims,
'count' => $claims->count(),
'actions' => $this->actions()
);
这样,您就不必担心虚拟列丢失和突出部分必须操纵的另一端不同的方式您的数据。