2015-01-07 66 views
-2

我是Symfony2和Doctrine的新手。我該如何做嵌套查詢Symfony2並在模板上顯示結果?

我有一個查詢:

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(); 

我能找到的所有用戶,我可以顯示在頁面上自己的名字。

但是我如何檢索所有其他數據?

回答

3

當使用學說提供的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 
} 

如果你想訂購的用戶對象的結果,以一種有意義的方式如用戶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到Y關聯正確設置了所有ORM實體。

+0

我認爲ORM實體是好的。我使用了Many-To-One,Unidirectional(http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html) 但我認爲構建的數組( $ cittas)不是空的,因爲我在模板中插入了「如果cittas沒有定義」並且什麼也沒有顯示。我使用第一個例子中的「foreach」。如何將值顯示到模板中? –

+0

我在模板上打印轉儲(citta),值的數組爲空 –