如何嵌套查询Symfony2并在模板上显示结果?

时间:2015-01-07 18:43:50

标签: symfony doctrine-orm

我是Symfony2和Doctrine的新手。

我有一个问题:

SELECT
    `Citta`.`value`, `User`.`slug`, `User`.`nome`, `Photo`.`value`, `User`.`slogan`
FROM `table1`.`users` AS `User`
LEFT JOIN `table1`.`photos` AS `Photo` ON (`Photo`.`user_id` = `User`.`id`)
INNER JOIN `table1`.`cittas` AS `Citta` ON (`Citta`.`id` = `User`.`citta_id`)
WHERE `User`.`attivo` = 1
GROUP BY `User`.`id`
ORDER BY `User`.`id` desc

我想将它放入默认控制器中的indexAction,因为我想在家中显示用户的名称,图片和城市。

$repository = $this->getDoctrine()->getRepository('MyBundle:Users');
$users = $repository->findAll(); 

我可以找到所有用户,我可以在页面上显示他们的名字。

但是如何检索所有其他数据?

1 个答案:

答案 0 :(得分:3)

使用Doctrine提供的findAll()函数时,可以使用实体中生成的辅助函数:

$repo = $this->getDoctrine()->getRepository('MyBundle:Users');
$users = $repo->findAll();

foreach ($users as $user) {
    $photos = $user->getPhotos();
    $cittas = $user->getCittas();
    // do stuff with the variables
}

如果您尝试以有意义的方式订购User对象的结果,例如按用户ID降序:

$users = $repo->findBy(array(), array('id' => 'DESC')); // first array() is for select portions

如果您正在尝试复制原始SQL查询(我甚至不确定会执行),您可以使用find()方法:

$repo = $this->getDoctrine()->getRepository('MyBundle:Users');
$users = $repo->find(1); // 1 is the User ID

$photos = $user->getPhotos();
$cittas = $user->getCittas();
// do stuff...

由于您在此方案中找到了单个条目,因此GROUP BYORDER BY是不必要的。

请注意,此答案假定您已使用Doctrine及其各自的X-to-Y关联正确设置了所有ORM实体。