我有實體學說與MAX()
Template {
/**
* @ORM\OneToMany(targetEntity="TemplateSnapshot", mappedBy="template", cascade={"all"})
*/
protected $snapshots;
}
/**
* @ORM\Entity
*/
class TemplateSnapshot {
/**
* @ORM\Column(type="datetime")
* @var \DateTime
*/
protected $modTime;
}
並嘗試獲得通過模板最後modTime在TemplateSnapshot有序
QueryBuilder $query
->leftJoin('EditorBundle:TemplateSnapshot','s','WITH', $tableAlias.'.id = s.template_id')
->groupBy($tableAlias.'.id')
->orderBy('s.modTime','desc')
;
我得到
選擇t0_.id AS ID0加盟,t0_.location AS location1,t0_.name AS name2,t1_.modTime AS modTime3 FROM Template t0_ LEFT JOIN TemplateSnapshot t1_ ON t0_.id = t1_.template_id LEFT JOIN TemplateSnap shot t2_ ON(t0_.id = t2_.template_id)WHERE t0_.name LIKE? GROUP BY t0_.id ORDER BY t2_.modTime DESC LIMIT 20
此返回第一個連接行。 (第一組然後排序)。我想與最新的TemplateSnapshot
其他獲得加入嘗試
$query
->leftJoin('TemplateEditorBundle:TemplateSnapshot',
's',
'WITH',
$tableAlias.'.id = s.template_id and s.modTime = MAX(s.modTime)'
)
->groupBy($tableAlias.'.id')
->orderBy('s.modTime','desc')
;
此我得到:
選擇t0_.id AS ID0,t0_.location AS LOCATION1,t0_.name AS NAME2,t1_ .modTime AS modTime3,MAX(t2_.modTime)AS sclr4 FROM Template t0_ LEFT JOIN TemplateSnapshot t1_ ON t0_.id = t1_.template_id LEFT JOIN TemplateSnapshot t2_ ON(t0_.id = t2_.template_id AND t2_.modTime = MAX(t2_。 modTime))WHERE t0_.name LIKE? ORDER BY t2_.modTime DESC LIMIT 20
和錯誤
enter code here
無效使用組功能
其他的想法
的我嘗試直接查詢TemplateSnapshot
$source = new Entity('TemplateEditorBundle:TemplateSnapshot');
$query
->orderBy($tableAlias.'.modTime','desc') ->groupBy($tableAlias.'.template_id')
;
但它首先gorup,然後訂購,所以不會得到最新的。
你想要檢索什麼? – 2014-10-17 08:28:16
我想通過modDate使用唯一的模板獲取TemplateSnapshot。 TemplateSnapshot有template_id行。 – 2014-10-17 09:05:30
你需要'Template'數據的每一行或'template_id'就夠了嗎? – 2014-10-17 09:27:24