我是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();
我可以找到所有用户,我可以在页面上显示他们的名字。
但是如何检索所有其他数据?
答案 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 BY
和ORDER BY
是不必要的。
请注意,此答案假定您已使用Doctrine及其各自的X-to-Y关联正确设置了所有ORM实体。