2015-02-10 4 views
1

Я создаю демонстрационный проект приложения управления задачами, чтобы получить доступ к symfony2. До сих пор я закончил операции CRUD. Это мой контроллер по умолчанию. Я вызываю getNumberOfTasks() здесь.Пользовательские классы хранилища в Symfony2

namespace TaskManagerBundle\Controller; 

use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 

use TaskManagerBundle\Entity\Projects; 
use TaskManagerBundle\Form\ProjectType; 



class DefaultController extends Controller 
{ 
public function indexAction() 
{ 
    $em = $this->getDoctrine()->getManager(); 

    $entities = $em->getRepository('TestBundle:Projects') 
      ->findAll(); 

    $tasks = $em->getRepository('TestBundle:Projects') 
      ->getNumberOfTasks(); 

    return $this->render('TestBundle:Default:index.html.twig', [ 
       'projects' => $entities, 
       'tasks' => $tasks, 
      ] 
    ); 
} 

Это мой ProjectRepository, где я определил метод getNumberOfTasks.

<?php 

     namespace TaskManagerBundle\Entity\Repository; 

    use Doctrine\ORM\EntityRepository; 
    use TaskManagerBundle\Entity\Projects; 
    use TaskManagerBundle\Entity\Tasks; 

    /** 
     * ProjectsRepository 
     * 
     * This class was generated by the Doctrine ORM. Add your own    custom 
     * repository methods below. 
     */ 
    class ProjectsRepository extends EntityRepository 
    { 
     public $id; 
     public function getNumberOfTasks() 
    { 
     //$projects = new Projects(); 

     $query = $this->getEntityManager() 
     ->createQuery(
        'SELECT p FROM TestBundle:Tasks p WHERE p.projects = :project_id' 
       ) 
     ->setParameter('project_id', $this->id) 
     ->getResult(); 
    return count($query); 
} 

}

Это мой index.html.twig

{% for project in projects %} 
     <tr> 
     <td> 
     {% if project.completed == 0 %} 
      {{ tasks }} 
     {% else %} 
      Completed 
     {% endif %} 
     </td> 
     </tr> 
    {% endfor %} 

Я пытаюсь получить количество заданий для каждого проекта. Как мне это сделать? В yii2 я мог бы просто сделать $ this-> id, но здесь я не могу этого сделать.

ответ

2

Вам вообще не нужен метод getNumberOfTasks.

Что вы должны делать, это указать ассоциации в ваших объектах Doctrine.

Вы можете прочитать об этом здесь:

http://doctrine-orm.readthedocs.org/en/latest/reference/association-mapping.html

Основываясь на своем наименовании, я бы подозревать OneToMany отношения от проекта к задаче, и отношения ManyToOne от задачи к проекту.

Когда отображается правильно, в Twig вы можете использовать:

{{ project.tasks|length }} 

, чтобы получить количество задач в проекте. Все, что вам нужно сделать, это передать объект проекта Twig, а Symfony будет обрабатывать остальные, включая загрузку во всех отношениях.

Это лучший способ сделать то, что вы пытаетесь сделать.

Смежные вопросы