Symfony2中的自定义存储库类

时间:2015-02-10 07:39:00

标签: symfony doctrine

我正在创建一个任务管理应用程序演示项目,以获取symfony2。到目前为止,我已经完成了CRUD操作。 这是我的默认控制器。我在这里调用getNumberOfTasks()。

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-&gt; id但是在这里我无法做到。

1 个答案:

答案 0 :(得分:2)

您根本不需要“getNumberOfTasks”方法。

您应该做的是指定您的Doctrine实体中的关联。

你可以在这里阅读:

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

根据您的命名,我怀疑从Project到Task的OneToMany关系,以及从Task到Project的ManyToOne关系。

正确映射后,您可以在Twig中使用:

{{ project.tasks|length }} 

获取项目中的任务数。您需要做的就是将Project Entity传递给Twig,Symfony将处理剩下的事情,包括加载所有关系。

这是做你想做的事情的最佳方式。