簡體   English   中英

計算Symfony2中的百分比

[英]Calculate percentage in Symfony2

我有兩個實體, ProjectsTasks及其各自的存儲庫。

我正在嘗試創建一個函數來計算totalNumberOfTasks()totalNumberOfCompletedTasks()getPercentComplete()

  • totalNumberOfTasks()基本上將從tasks表中獲取與特定project_id相關的所有數據。
  • totalNumberOfCompletedTasks()將查詢與特定project_id相關的所有數據,但僅查詢從tasks表中標記為COMPLETED所有數據。
  • getPercentComplete()將根據totalNumberOfTasks()totalNumberOfCompletedTasks()函數計算百分比,並在視圖文件中打印。

我已經嘗試在Twig文件中執行{{ project.tasks|length }} %該文件僅獲取與該特定id相關的任務總數。 如何獲取任務和已完成任務的總數,找到百分比,然后在視圖文件中顯示每個項目的顯示位置? 對不起我的英語不好。 我只是無法使問題更容易理解。

Project實體:

<?php

namespace TaskManagerBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Projects
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="TaskManagerBundle\Entity\Repository\ProjectsRepository")
 * @ORM\HasLifecycleCallbacks()
 */
class Projects
{
    /**
     *
     * @ORM\OneToMany(targetEntity="Tasks", mappedBy="projects")
     */
    protected $tasks;

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="title", type="string", length=30)
     */
    private $title;

    /**
     * @var boolean
     *
     * @ORM\Column(name="completed", type="boolean")
     */
    private $completed;

    /**
     * @var \Date
     *
     * @ORM\Column(name="due_date", type="date")
     */
    private $dueDate;

    /**
     * @var \Date
     *
     * @ORM\Column(name="created", type="date")
     */
    private $created;

    /**
     * @var \Date
     *
     * @ORM\Column(name="updated", type="date")
     */
    private $updated;

    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set title
     *
     * @param string $title
     * @return Projects
     */
    public function setTitle($title)
    {
        $this->title = $title;

        return $this;
    }

    /**
     * Get title
     *
     * @return string
     */
    public function getTitle()
    {
        return $this->title;
    }

    /**
     * Set completed
     *
     * @param boolean $completed
     * @return Projects
     */
    public function setCompleted($completed)
    {
        $this->completed = $completed;

        return $this;
    }

    /**
     * Get completed
     *
     * @return boolean
     */
    public function getCompleted()
    {
        return $this->completed;
    }

    /**
     * Set dueDate
     *
     * @param \Date $dueDate
     * @return Projects
     */
    public function setDueDate($dueDate)
    {
        $this->dueDate = $dueDate;

        return $this;
    }

    /**
     * Get dueDate
     *
     * @return \Date
     */
    public function getDueDate()
    {
        return $this->dueDate;
    }

    /**
     * Set created
     *
     * @param \Date $created
     * @return Projects
     */
    public function setCreated($created)
    {
        $this->created = $created;

        return $this;
    }

    /**
     * Get created
     *
     * @return \date
     */
    public function getCreated()
    {
        return $this->created;
    }

    /**
     * Set updated
     *
     * @param \Date $updated
     * @return Projects
     */
    public function setUpdated($updated)
    {
        $this->updated = $updated;

        return $this;
    }

    /**
     * Get updated
     *
     * @return \Date
     */
    public function getUpdated()
    {
        return $this->updated;
    }

    /**
     * @ORM\PrePersist
     */
    public function setCreatedValue()
    {
        $this->created = new \DateTime();
    }

    /**
     * @ORM\PreUpdate
     */
    public function setUpdatedValue()
    {
        $this->updated = new \DateTime();
    }

    public function getNumberOfTasks()
    {

    }
    /**
     * Constructor
     */
    public function __construct()
    {
        $this->tasks = new \Doctrine\Common\Collections\ArrayCollection();
    }

    /**
     * Add tasks
     *
     * @param \TaskManagerBundle\Entity\Tasks $tasks
     * @return Projects
     */
    public function addTask(\TaskManagerBundle\Entity\Tasks $tasks)
    {
        $this->tasks[] = $tasks;

        return $this;
    }

    /**
     * Remove tasks
     *
     * @param \TaskManagerBundle\Entity\Tasks $tasks
     */
    public function removeTask(\TaskManagerBundle\Entity\Tasks $tasks)
    {
        $this->tasks->removeElement($tasks);
    }

    /**
     * Get tasks
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getTasks()
    {
        return $this->tasks;
    }
}

Tasks實體:

namespace TaskManagerBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Tasks
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="TaskManagerBundle\Entity\Repository\TasksRepository")
 * @ORM\HasLifecycleCallbacks()
 */
class Tasks
{
    /**
     *
     * @ORM\ManyToOne(targetEntity="Projects", inversedBy="tasks")
     * @ORM\JoinColumn(name="projects_id", referencedColumnName="id")
     */
    protected $projects;

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="title", type="string", length=30)
     */
    private $title;

    /**
     * @var string
     *
     * @ORM\Column(name="description", type="text")
     */
    private $description;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="updated", type="date")
     */
    private $updated;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="created", type="date")
     */
    private $created;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="due_date", type="date")
     */
    private $dueDate;

    /**
     * @var boolean
     *
     * @ORM\Column(name="completed", type="boolean")
     */
    private $completed;

    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set title
     *
     * @param string $title
     * @return Tasks
     */
    public function setTitle($title)
    {
        $this->title = $title;

        return $this;
    }

    /**
     * Get title
     *
     * @return string
     */
    public function getTitle()
    {
        return $this->title;
    }

    /**
     * Set description
     *
     * @param string $description
     * @return Tasks
     */
    public function setDescription($description)
    {
        $this->description = $description;

        return $this;
    }

    /**
     * Get description
     *
     * @return string
     */
    public function getDescription()
    {
        return $this->description;
    }

    /**
     * Set updated
     *
     * @param \DateTime $updated
     * @return Tasks
     */
    public function setUpdated($updated)
    {
        $this->updated = $updated;

        return $this;
    }

    /**
     * Get updated
     *
     * @return \DateTime
     */
    public function getUpdated()
    {
        return $this->updated;
    }

    /**
     * Set created
     *
     * @param \DateTime $created
     * @return Tasks
     */
    public function setCreated($created)
    {
        $this->created = $created;

        return $this;
    }

    /**
     * Get created
     *
     * @return \DateTime
     */
    public function getCreated()
    {
        return $this->created;
    }

    /**
     * Set dueDate
     *
     * @param \DateTime $dueDate
     * @return Tasks
     */
    public function setDueDate($dueDate)
    {
        $this->dueDate = $dueDate;

        return $this;
    }

    /**
     * Get dueDate
     *
     * @return \DateTime
     */
    public function getDueDate()
    {
        return $this->dueDate;
    }

    /**
     * Set completed
     *
     * @param boolean $completed
     * @return Tasks
     */
    public function setCompleted($completed)
    {
        $this->completed = $completed;

        return $this;
    }

    /**
     * Get completed
     *
     * @return boolean
     */
    public function getCompleted()
    {
        return $this->completed;
    }

    /**
     * Set projects
     *
     * @param \TaskManagerBundle\Entity\Projects $projects
     * @return Tasks
     */
    public function setProjects(\TaskManagerBundle\Entity\Projects $projects = null)
    {
        $this->projects = $projects;

        return $this;
    }

    /**
     * Get projects
     *
     * @return \TaskManagerBundle\Entity\Projects
     */
    public function getProjects()
    {
        return $this->projects;
    }
}

控制器:

<?php

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

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

您可以使用Doctrine Criteria歸檔此問題,而不是使用自定義Repository方法。 作為示例,您可以將以下方法添加到Projects Entity類:

use Doctrine\Common\Collections\Criteria;  // IMPORT THIS!
use Doctrine\ORM\Mapping as ORM;

/**
 * Projects
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="TaskManagerBundle\Entity\Repository\ProjectsRepository")
 * @ORM\HasLifecycleCallbacks()
 */
class Projects
{
 ...
    public function getCompleteTasks()
    {
        $expr = Criteria::expr();
        $criteria = Criteria::create();

        $criteria->where($expr->eq('completed', true));

        return $this->getTasks()->matching($criteria);
    }

    public function getNumberOfTasks()
    {
        return $this->getTasks()->count();
    }

    public function getPercentComplete()
    {
        $percentage = 0;
        $totalSize = $this->getNumberOfTasks();
        if ($totalSize>0)
        {
            $completedSize = $this->getCompleteTasks()->count();
            $percentage =  $completedSize / $totalSize * 100;
        }

        return $percentage;
        }
...
}

然后您可以在Twig模板中使用如下:

{{ project.percentComplete|number_format(2, '.', ',') }}

希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM