我想在特定状态的时期内编辑活动。0-活性,1活性,2验证,3封闭。如果该期间的状态为1,则允许用户编辑。否则,他们会出错。即使状态为 @ 1,用户仍然会出现错误。该循序则是活动表中的外键,而状态是另一个带有周期ID的表具有主要键。我在
中有这个存储库
public function findBytransid($payrollperiodid)
{
$repository=$this->getEntityManager()->getRepository('comtwclagripayrollBundle:Activity');
$qb = $repository->createQueryBuilder('a');
$qb->select('a','pp');
$qb->Join('a.payrollperiodid','pp');
$qb->where('pp.state = :state');
$qb->setParameter('state', 1);
return $results = $qb->getQuery()->getResult();
}
控制器
$entity = $em->getRepository('comtwclagripayrollBundle:Activity')
->createQueryBuilder('a')
->innerJoin('a.sectionid', 's')
->innerJoin('s.farmid', 'f')
->where('a.transid=:id')
->setParameter('id', $id)
->getQuery()->getSingleResult();
$state = $em->getRepository('AcmeDemoBundle:Activity')->findBytransid($id);
if (!$entity) {
throw $this->createNotFoundException('Unable to find Activity entity.');
} elseif ($state) {
$this->addFlash('error', 'ERROR! Cannot edit, this activity is active.');
return $this->redirect($this->generateUrl('activity'));
} else {
$editForm = $this->createEditForm($entity);
$deleteForm = $this->createDeleteForm($id);
return array(
'entity' => $entity,
'edit_form' => $editForm->createView(),
'delete_form' => $deleteForm->createView(),
);
}
编辑例如,用户单击一项与1个状态匹配的活动,然后将它们带到编辑表单页面其他错误您可以编辑此活动
我建议:
- 将您的
findBytransid
功能放在存储库中。也许另一个控制器需要它。 - 检查您的
findBytransid
功能,该功能不绑定到一个活动,但会返回活动数组。该函数名为findBytransid
,但永远不会使用Sayed ID。 - 为您使用正确的名称变量:
findBytransid()
绑定到活动存储库,但您将其命名为返回状态 -
编写状态和活动请求:
public function findActivityByTransId ($id) { $qb = $this->createQueryBuilder('a'); // because the function is placed in the repository $qb->innerJoin('a.sectionid', 's') ->innerJoin('s.farmid', 'f') ->join('a.payrollperiodid','pp') ->where('a.transid=:id') ->setParameter('id', $id) ->getQuery()->getSingleResult(); }
然后在控制器中:
// ....
$activity = $repository->findActivityByTransId($id);
if ($activity == null) {
throw $this->createNotFoundException('Unable to find Activity entity.');
} else {
if ($activity->getParyrollPeriodId() == null || $activity->getParyrollPeriodId()->getState() != 1) {
$this->addFlash('error', 'ERROR! Cannot edit, this activity is active.');
return $this->redirect($this->generateUrl('activity'));
} else {
....
}
注意:由于您只需要一个实体,您就可以利用学说的懒惰加载功能,并使用
内置提取方法$activity = $repository->find($id); //if transid is the primary key otherwise use findBy(array(...))
希望这有帮助