错误:在 null 上调用成员函数 setPayrollperiodid()

起诉

我正在尝试计算与输入的工资核算期相匹配的工资核算周数。它返回正确的数字,但不会添加到数据库中,而是说数据库中没有匹配项。当我进行更改时,我收到此错误:

错误:在 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());

由于没有发现任何东西,$payrollweekNULL不是你的实例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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

错误:在字符串上调用成员函数setPayrollperiodid()

错误:在null上调用成员函数add()

CodeIgniter错误-在null上调用成员函数

Laravel-错误:在null上调用成员函数fullName()

PHP CURL致命错误:在null上调用成员函数getAttribute()

错误消息:在null上调用成员函数render()

Codeigniter 3致命错误:在null上调用成员函数database()

登录时出现错误“在 null 上调用成员函数 prepare()”

致命错误:在null上调用成员函数hasAttribute()

PHP - 在 null 上调用成员函数 query() - 错误

如何修复“在null上调用成员函数update()”错误?

错误:在Drupal 8中在null上调用成员函数uuid()

致命错误:在null上调用成员函数prepare()

致命错误:在null上调用成员函数query()

致命错误:在null上调用成员函数query()(Laravel 5.2)

Laravel 5.5 - “在 null 上调用成员函数 sync()”错误

未捕获的错误:在null上调用成员函数query()

Mysqli:致命错误:在null上调用成员函数prepare()

laravel 5.7错误:在null上调用成员函数save()

PHP 未捕获错误:在 null 上调用成员函数 query(),

致命错误:在 null 上调用成员函数 add()

致命错误:在非对象上调用成员函数prepare(),调用prepare语句的对象不为null

我在更新函数上遇到了这个错误(在 null 上调用成员函数 getClientOriginalExtension())

致命错误:未捕获的错误:在 wordpress 中在 null 上调用成员函数 insert()

致命错误:未捕获错误:在null上调用成员函数select()

使用PDO时出现错误:致命错误:在null上调用成员函数prepare()

致命错误:未被捕获的错误:在null上调用成员函数prepare()

致命错误:未被捕获的错误:在null上调用成员函数query()

Symfony FOSRestBundle 错误:在 null 上调用成员函数 get()。[路由或配置错误]