APYDataGridBundle:对于未显示的别名列数据

时间:2015-05-04 11:31:46

标签: symfony

我正在使用Symfony2的APYDataGridBundle。

我的最终目标是在网格中为每个用户设置一行(现在可以),并且拥有一个带有id或null的favoris_id列(然后使用JS我可以设法显示联系人是否是用户喜欢的一部分或者不使用ajax添加或删除收藏夹。

如果我使用注释添加列,我会在每个现有收藏夹中以一行为结尾,而不是为登录用户提供null或id的1行。

因此,我操纵查询以添加字段,然后添加别名列。生成的查询正常,显示列si但单元格为空,并且它们不显示f.id。

这是我的问题:

$source->manipulateQuery(
            function ($query) use ($alias, $userId, $sourceType) {
                $query
                    ->addSelect('f.id favorisid')
                    ->leftJoin($alias . '.usersFavoris', 'f', 'WITH', 'f.user = :user')
                    ->andWhere($alias . '.source = :sourceparam')
                    ->setParameter('user', $userId)
                    ->setParameter('sourceparam', $sourceType)
                ;
            }

这是我的别名专栏:

    // Add Column favoris_id
    $myCol = new TextColumn(
        array(  'id'            => 'favoris_id',
                'title'         => 'favoris id',
                'field'         => 'favorisid', // The aliased name
                'isManualField' => true, // Indicate it is a manual (or aliased) field
                'isAggregate'   => false, // Defaults to false, set true if using aggregate func. like SUM()
                'source'        => true, // Indicates the grid should retrieve it from the source (the query)
    ));
    $grid->addColumn($myCol,8);

以下是联系人实体的相关部分:

/**
 * @ORM\OneToMany(targetEntity="Curuba\contactsBundle\Entity\contactsFavoris", mappedBy="contact", orphanRemoval=true, cascade={"remove", "persist"})
 * @ORM\JoinColumn(nullable=true)
 */
private $usersFavoris;

分析器提供的可运行查询是正确的:

SELECT c0_.nom AS nom0, c0_.prenom AS prenom1, e1_.nom AS nom2, 
f2_.fonction AS fonction3, u3_.fullname AS fullname4, c0_.updated AS updated5, 
c0_.id AS id6, c0_.fullname AS fullname7, c0_.prefix AS prefix8, 
c0_.communications AS communications9, e1_.cp AS cp10, e1_.adresse AS adresse11, 
f2_.persomail AS persomail12, c4_.nom AS nom13, s5_.nom AS nom14, s6_.nom AS nom15, 
c7_.id AS id16
FROM contacts c0_
LEFT JOIN fonctions f2_ ON c0_.id = f2_.contact_id
LEFT JOIN entites e1_ ON f2_.entite_id = e1_.id
LEFT JOIN users u3_ ON c0_.referent_id = u3_.id
LEFT JOIN categories c4_ ON e1_.categorie_id = c4_.id
LEFT JOIN souscategories s5_ ON e1_.souscategorie_id = s5_.id
LEFT JOIN sources s6_ ON e1_.source_id = s6_.id
LEFT JOIN contactsFavoris c7_ ON c0_.id = c7_.contact_id AND (c7_.user_id = 59)
WHERE c0_.source_id = 1
ORDER BY c0_.fullname ASC
LIMIT 20

1 个答案:

答案 0 :(得分:0)

我从这个捆绑包的贡献者那里得到了答案。 我们必须使用相同的名称,即使有一个' flied'参数。 所以使用favorisid而不是favoris_id解决了这个问题:

// Add Column favoris_id
$myCol = new TextColumn(
    array(  'id'            => 'favorisid',
            'title'         => 'favorisid',
            'field'         => 'favorisid', // The aliased name
            'isManualField' => true, // Indicate it is a manual (or aliased) field
            'isAggregate'   => false, // Defaults to false, set true if using aggregate func. like SUM()
            'source'        => true, // Indicates the grid should retrieve it from the source (the query)
));
$grid->addColumn($myCol,8);