与特定的国家符合者一起编辑活动



我想在特定状态的时期内编辑活动。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(...))

希望这有帮助

最新更新