2015-06-12 29 views
0

我理解查询生成器如何工作,但我试图正确使用ORM。Symfony2 - 通过父项属性对象查找

我有两个实体:天与任务

任务实体与日实体与多对一关联。

Tasks.orm.yml

DJU\ MyBundle\ Entity\ Tasks: 
 
    type: entity 
 
table: null 
 
repositoryClass: DJU\ MyBundle\ Entity\ TasksRepository 
 
id: 
 
    id: 
 
    type: integer 
 
id: true 
 
generator: 
 
    strategy: AUTO 
 
fields: 
 
    description: 
 
    type: text 
 
manyToOne: 
 
    days: 
 
    targetEntity: Days 
 
inversedBy: tasks 
 
joinColumn: 
 
    name: days_id 
 
referencedColumnName: id

Tasks.php

class Tasks { 
    /** 
    * Get temps 
    * 
    * @return \CIT\CalendarBundle\Entity\Temps 
    */ 
    public function getTemps() 
    { 
     return $this->temps; 
    } 
} 

这里是我的控制器:

class DefaultController extends Controller 
 
{ 
 
    public function example2CalAction() { 
 
     $em = $this->getDoctrine()->getManager(); 
 
     $tasks = $em->getRepository('DJUMyBundle:Tasks')->findAll(); 
 
     
 
     foreach($tasks as $onetask) { 
 
      if ($onetask->getDays()->getId() == '1') { 
 
       $myt = $onetask->getDays(); 
 
      } 
 
     }  
 
     return $this->render('DJUMyBundle:Default:sample2.html.twig', array('tasks' => $myt)); 
 
    } 
 
}

正如您所看到的,我的请求性能不佳。我想找到按天数编号的任务。我能怎么做?

谢谢

回答

0

存储库是您的解决方案。

class TasksRepository { 
    public function findByDay(Day $day) 
    { 
     $q = $this 
     ->createQueryBuilder('t') 
     ->select('t') 
     ->leftJoin('t.days', 'd') 
     ->where("d.id = :dayId") 
     ->setParameter('dayId', $dayId) 
     ->getQuery(); 
     $result = $q->getResult(); 

     return $result; 
    } 
} 

找到你1天的任务使用:

$day = $em->getRepository('DJUMyBundle:Day')->find(1); 
$tasks = $em->getRepository('DJUMyBundle:Tasks')->findByDay($day); 
+0

谢谢,我终于放弃使用查询生成器。 – mctroubleshooter