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