Php 向推进模型添加自定义列?

Php 向推进模型添加自定义列?,php,orm,propel,symfony-2.1,Php,Orm,Propel,Symfony 2.1,目前,我正在使用以下查询: $claims = ClaimQuery::create('c') ->leftJoinUser() ->withColumn('CONCAT(User.Firstname, " ", User.Lastname)', 'name') ->withColumn('User.Email', 'email') ->filterByArray($conditions) -

目前,我正在使用以下查询:

$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));
然而,当数据返回时,当它与所有的superflous模型数据一起转换为JSON时,Prope或Symfony2似乎正在剥离自定义数据


以这种方式手动添加数据的正确方法是什么

答案在于toArray()方法,因此:

$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();
然后您可以根据需要进行修改,这里唯一的问题是当前toArray方法不返回虚拟列,因此您必须对该方法进行修补以包含它们。(这在PropelObjectCollection类中)

最后,我决定将以下部分分开:

return array(
        'claims' => $claims, 
        'count' => $claims->count(),
        'actions' => $this->actions()
    );

这样,您就不必担心虚拟列丢失,也不必在另一端以不同的方式操作数据。

要将虚拟列导出到out array,您可以使用下一种方法:

/**
*推进结果集
*@var\PropelObjectCollection
*/
$claims=ClaimQuery::create('c')->…->getResults();
/**
*具有虚拟列的数据数组
*@var数组
*/
$claims\u array=array\u map(函数(Claim$Claim){
返回数组合并(
$claim->toArray(),//使用“本机”导出函数
数组(//添加虚拟列
'Email'=>$claim->getVirtualColumn('Email'),
'Name'=>$claim->getVirtualColumn('Name')
)
);
},$claims->getArrayCopy());//正在从'PropelObjectCollection'获取'Claim'对象数组`
未结算($索赔);//如果要完成进一步的操作,请取消设置不必要的对象