我正在尝试计算与输入的工资核算期相匹配的工资核算周数。它返回正确的数字,但不会添加到数据库中,而是说数据库中没有匹配项。当我进行更改时,我收到此错误:
错误:在 null 上调用成员函数 setPayrollperiodid()。
我已经概述了到目前为止我所拥有的。谁能告诉我我哪里出错了。
我已经对问题进行了一些更新,我不再收到该错误,但没有添加记录,而是说它与我在控制器中出错的地方不匹配。
class PayrollweekRepository extends EntityRepository
{
public function findBystartdateAndenddate($startdate, $enddate)
{
$repository = $this->getEntityManager()
->getRepository('comtwclagripayrollBundle:Payrollweek');
$qb = $repository->createQueryBuilder('pw');
$qb->select('pw');
$qb->where('pw.startdate=:startdate');
$qb->Andwhere('pw.enddate=:enddate');
$qb->setParameter('startdate', $startdate);
$qb->setParameter('enddate', $enddate);
$qb->getquery()->getResult();
}
public function countBystartdateAndenddate($startdate, $enddate)
{
$repository = $this->getEntityManager()
->getRepository('comtwclagripayrollBundle:Payrollweek');
$qb = $repository->createQueryBuilder('pw');
$qb->select('count(pw.id)');
$qb->where('pw.startdate=:startdate or pw.enddate=:enddate');
$qb->setParameter('startdate', $startdate);
$qb->setParameter('enddate', $enddate);
$count = $qb->getQuery()->getSingleScalarResult();
var_dump($count);
return $count;
}
}
public function createAction(Request $request)
{
$entity = new Payrollperiod();
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$payrollperiod = $em->getRepository('comtwclagripayrollBundle:Payrollperiod')
->findOneBy([
'startdate' => $form->get('startDate')->getData(),
'enddate' => $form->get('endDate')->getData()]
);
$payrollweek = $em->getRepository('comtwclagripayrollBundle:Payrollweek')
->findBystartdateAndenddate($entity->getStartDate() , $entity->getEndDate());
$counter = $em->getRepository('comtwclagripayrollBundle:Payrollweek')
->countBystartdateAndenddate($entity->getStartDate() , $entity->getEndDate());
//If entity exists
if ($payrollperiod){
$this->addFlash('error', 'Error: A payroll period is already present with the same start and end date.');
return $this->redirect($this->generateUrl('payrollperiod'));
}
//If PayrollWeek matches the Payrollperiod entered
elseif ( $counter==2){
$payrollweek->setPayrollperiodid($entity);
}
$em->persist($entity);
$em->flush();
$this->addFlash('success', 'Payroll Period was added.');
$this->addFlash('success', 'Payroll week was updated.');
return $this->redirect($this->generateUrl('payrollperiod'));
//return $this->redirect($this->generateUrl('payrollperiod_show', array('payrollperiodid' => $entity->getpayrollperiodid())));
}
else{
$this->addFlash('error', 'Payroll Period does not match a payroll week.');
return $this->redirect($this->generateUrl('payrollperiod'));
}
//return $this->render('comtwclagripayrollBundle::new.html.twig',array('form' => $form->createView()));
return array(
'entity' => $entity,
'form' => $form->createView(),
);
}
更新
public function countBystartdateAndenddate($startdate, $enddate)
{
$repository = $this->getEntityManager()
->getRepository('comtwclagripayrollBundle:Payrollweek');
$qb = $repository->createQueryBuilder('pw');
$qb->select('count(pw.id)');
$qb->where('pw.startdate=:startdate or pw.enddate=:enddate');
$qb->setParameter('startdate', $startdate);
$qb->setParameter('enddate', $enddate);
$count = $qb->getQuery()->getResult();
var_dump($count);
return $count;
}
public function createAction(Request $request)
{
$entity = new Payrollperiod();
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$payrollperiod = $em->getRepository('comtwclagripayrollBundle:Payrollperiod')->findOneBy(['startdate'=>$form->get('startDate')->getData(), 'enddate'=>$form->get('endDate')->getData()]);
//$payrollweek = $em->getRepository('comtwclagripayrollBundle:Payrollweek')->findBystartdateAndenddate($form->get('startDate')->getData(), $form->get('endDate')->getData());
$counter = $em->getRepository('comtwclagripayrollBundle:Payrollweek')->countBystartdateAndenddate($form->get('startDate')->getData(), $form->get('endDate')->getData());
//If entity exists
if ($payrollperiod){
$this->addFlash('error', 'Error: A payroll period is already present with the same start and end date.');
return $this->redirect($this->generateUrl('payrollperiod'));
}
//If PayrollWeek matches the Payrollperiod entered
elseif ($counter==2){
foreach ($counter as $pWeek) {
$pWeek->setPayrollperiodid($entity);
}
$em->persist($entity);
$em->flush();
$this->addFlash('success', 'Payroll Period was added.');
$this->addFlash('success', 'Payroll week was updated.');
return $this->redirect($this->generateUrl('payrollperiod'));
//return $this->redirect($this->generateUrl('payrollperiod_show', array('payrollperiodid' => $entity->getpayrollperiodid())));
}
else{
$this->addFlash('error', 'Payroll Period does not match a payroll week.');
return $this->redirect($this->generateUrl('payrollperiod'));
}
}
//return $this->render('comtwclagripayrollBundle::new.html.twig',array('form' => $form->createView()));
return array(
'entity' => $entity,
'form' => $form->createView(),
);
}
进一步更新
public function createAction(Request $request)
{
$entity = new Payrollperiod();
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$payrollperiod = $em->getRepository('comtwclagripayrollBundle:Payrollperiod')->findOneBy(['startdate'=>$form->get('startDate')->getData(), 'enddate'=>$form->get('endDate')->getData()]);
$payrollweek = $em->getRepository('comtwclagripayrollBundle:Payrollweek')->findBystartdateAndenddate($form->get('startDate')->getData(), $form->get('endDate')->getData());
//If entity exists
if ($payrollperiod){
$this->addFlash('error', 'Error: A payroll period is already present with the same start and end date.');
return $this->redirect($this->generateUrl('payrollperiod'));
}
//If PayrollWeek matches the Payrollperiod entered
elseif ($payrollweek){
$count = count($payrollweek);
foreach ($payrollweek as $pWeek) {
$pWeek->setPayrollperiodid($entity);
}
$em->persist($entity);
$em->flush();
$this->addFlash('success', 'Payroll Period was added.');
$this->addFlash('success', 'Payroll week was updated.');
return $this->redirect($this->generateUrl('payrollperiod'));
//return $this->redirect($this->generateUrl('payrollperiod_show', array('payrollperiodid' => $entity->getpayrollperiodid())));
}
else{
$this->addFlash('error', 'Payroll Period does not match a payroll week.');
return $this->redirect($this->generateUrl('payrollperiod'));
}
}
//return $this->render('comtwclagripayrollBundle::new.html.twig',array('form' => $form->createView()));
return array(
'entity' => $entity,
'form' => $form->createView(),
);
}
$payrollweek
在尝试使用它之前,您没有检查它是否存在。在您的情况下,当您运行此函数时它没有找到值:
$payrollweeks = $em->getRepository('comtwclagripayrollBundle:Payrollweek')
->findBystartdateAndenddate($entity->getStartDate() , $entity->getEndDate());
由于没有发现任何东西,$payrollweek
是NULL
不是你的实例Payrollweek实体。你可以像这样添加另一个检查:
if (!$payrollweeks) {
$this->addFlash(
'error',
'Error: No payroll week found with the given start and end date'
);
return $this->redirect($this->generateUrl('payrollperiod'));
}
基于讨论的编辑:
你应该能够摆脱你的countBystartdateAndenddate()
函数,只使用 PHP 的count()函数来获得你想要的结果,然后循环你的工资周:
$count = count($payrollweeks);
foreach ($payrollweeks as $payrollweek) {
$payrollweek->setPayrollperiodid($entity);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句