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

Symfony APYDataGridBundle:对于未显示的别名列数据,symfony,Symfony,我正在为Symfony2使用APYDataGridBundle 我的最终目标是在网格中每个用户有一行(现在可以了),并且有一个id为或null的favoris_id列(然后使用JS我可以通过ajax显示联系人是否是用户收藏夹的一部分来添加或删除收藏夹) 如果我使用注释来添加列,那么我会在用户中为每个现有收藏夹添加一行,而不是为登录用户添加一行null或id 因此,我正在处理查询以添加字段,然后添加别名列。生成的查询是确定的,列si显示,但单元格为空,不显示f.id 我的问题是: $source-

我正在为Symfony2使用APYDataGridBundle

我的最终目标是在网格中每个用户有一行(现在可以了),并且有一个id为或null的favoris_id列(然后使用JS我可以通过ajax显示联系人是否是用户收藏夹的一部分来添加或删除收藏夹)

如果我使用注释来添加列,那么我会在用户中为每个现有收藏夹添加一行,而不是为登录用户添加一行null或id

因此,我正在处理查询以添加字段,然后添加别名列。生成的查询是确定的,列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

我从这个包的一个贡献者那里得到了答案。 即使存在“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);