如何在Symfony 2中使用Ali Data Table Bundle处理实体之间的一对多关系

时间:2013-06-02 06:07:10

标签: symfony

我有两个实体说“Users”和“UsersMeta”。我使用AliDataTable Bundle来显示来自两个表的数据,但我在表之间有1到多个关系。因此,当我正在加入时,我得到的结果是正确的,但我不希望这样。 假设两个表的数据为

用户

id|firstname|lastname|email
1 |abc      |xyz     |abc@abc.com 
2 |def      |zyx     |def@test.com

UsersMeta

Meta_id|User_id|fieldname|fieldValue
      1|1      |dob      |ddd
      2|1      |gender   |ggg
      3|2      |dob      |ddd2
      4|2      |gender   |ggg2

我使用AliDataTable作为

获取列表
Firstname|lastname|Email       |Fieldname|Fieldvalue
      abc|xyz     |abc@test.com|dob      |ddd
      abc|xyz     |abc@test.com|gender   |ggg
      def|zyx     |def@test.com|dob      |ddd2
      def|zyx     |def@test.com|gender   |ggg2

AliDataTable配置的采样示例代码如下

private function _DataTable()
{
    $controller_instance = $this;
    $datatable = $this->get('datatable');
    return $datatable->setEntity("xxx\Entity\ User ", "u")                          
                ->setFields(
                        array(
                            "First Name"      => 'u.firstName',     
                            "Last Name"       => 'u.lastName',
                            "Email"           => 'u.email',
                           "FieldName"        => 'um.fieldName',
                            "FieldValue"      => 'um.fieldValue',
                            "_identifier_"    => 'u.userId')                    
                        )
                ->addJoin('u. UsersMeta', 'um', \Doctrine\ORM\Query\Expr\Join::INNER_JOIN)
                ->setWhere(                                                     
                    'u.userId = um.userId
                )

                })

                ->setHasAction(true);                                           
}

我希望数据显示为

Firstname|lastname|Email       |dob      |gender
      abc|xyz     |abc@test.com|ddd      |ggg
      def|zyx     |def@test.com|ddd2     |ggg2

那么,如何使用AliDataTable包获取上述格式的数据?我已经读过我们可以自定义字段值的呈现,但在上面的情况下我需要更改表的呈现。我不知道这是否可能,因为我刚刚开始在Symfony2工作。请建议。

0 个答案:

没有答案