我正在使用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
答案 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);