0

我需要计算 Workers 表中的行数(类似于经典的 person)实体:

class Worker
{
/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $idWorker;

/**
 * @ORM\Column(type="string", length=20)
 */
private $omang;

/**
 * @ORM\Column(type="string", length=100)
 */
private $workerTitle;


/**
 * @ORM\Column(type="string", length=100)
 */
private $workerName;

......这些其他变量也在实体中,但它们是在工人的一天生成的:

//date of retirement
private $retireYear;
//time to retirement
private $timeToRetirement;

//Time left in: Years, Months and days these are INTEGER VALUES
private $yearsLeft;
private $monthsLetf;
private $daysLeft;

在 Worker 存储库中,我有这个函数可以计算所有行:

   public function countTotalWorkers (){
     $query = $this->createQueryBuilder('Worker')->select('COUNT(Worker)');
     $total = $query->getQuery()->getSingleScalarResult();
     return $total;
   }

现在我想做一些不同的事情,我想计算所有yearsLeft小于 1 的行,但剩余年数不在数据库中,正如我所说,它是一个存在于 Worker 内部的生成值,它是在一个课程的公共功能...如果您认为需要更多信息,请随时询问...在此先感谢您。

4

1 回答 1

1

为此,您有两种方法:

从数据库中选择所有工作人员

这样做,您可以加载生成yearleft值的工作数据。然后,您可以执行以下操作:

$workers = $this->getRepository('Worker')->findAll();

$total = 0;
foreach ($workers as $w)
{
    if ($w->getYearsLeft() < 1)
        $total ++;
}

将 yearsLeft 存储在数据库中

我不知道你的场景可能是最好的实现,但如果你最终将此值存储在 db 中,你可以这样做:

$query = $this->createQueryBuilder();
$query->select('count(w.id)');
$query->from('Worker', 'w');
$query->where('w.yearsLeft < ?1');
$query->setParameter(1, 1);

$total = $query->getQuery()->getSingleScalarResult;
于 2013-10-22T18:01:53.717 回答