2017-08-09 100 views
2

我有一个错误,当我尝试创建一个记录时,它给了我这个错误,错误:调用成员函数setPayrollperiodid()在字符串中的C: \ wamp64 \ WWW \ AgripayrollsystemV2 \ AgriPayrollSystem \ SRC \ COM \ TWCL \ agripayrollBundle \控制器\ PayrollperiodController.php。这一行:** $ pWeek-> setPayrollperiodid($实体); **错误:调用成员函数setPayrollperiodid()on字符串

实体

<?php 

namespace com\twcl\agripayrollBundle\Entity; 


//use Doctrine\Common\Collections\ArrayCollection; 
use Symfony\Component\Validator\Constraints as Assert; 


/** 
* Payrollperiod 
* 

*/ 
class Payrollperiod 
{ 
    /** 
    * @var integer 
    * 

    */ 
    private $payrollperiodid; 

    /** 
    * @var \DateTime 
    * 

    * @Assert\DateTime() 
    */ 

    private $startdate; 

    /** 
    * @var \DateTime 
    * 
    * 
    * @Assert\Type("DateTime") 
    * message="The end date must be after the start date") 
    */ 
    private $enddate; 

    /** 
    * @var integer 
    * 

    * 
    */ 
    private $state; 

    public function getPayrollperiodid() { 
     return $this->payrollperiodid; 
    } 

    public function getStartdate() { 
     return $this->startdate; 
    } 

    public function getEnddate() { 
     return $this->enddate; 
    } 

    public function getState() { 
     return $this->state; 
    } 

    public function setPayrollperiodid($payrollperiodid) { 
     $this->payrollperiodid = $payrollperiodid; 
    } 

    public function setStartdate(\DateTime $startdate) { 
     $this->startdate = $startdate; 
    } 

    public function setEnddate(\DateTime $enddate) { 
     $this->enddate = $enddate; 
    } 

    public function setState($state) { 
     $this->state = $state; 
    } 

    /** 
    * Render a payrollPeriodID as a string. 
    * 
    * @return string 
    */ 
    public function __toString() 
    { 
    return (string) $this->getPayrollperiodid(); 

    } 



} 

控制器

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', 'Payroll Period exist.'); 
       return $this->redirect($this->generateUrl('payrollperiod')); 
      } 
      //If PayrollWeek matches the Payrollperiod entered 
      elseif ($payrollweek){ 

      foreach($payrollweek as $pWeek) { 
      **$pWeek->setPayrollperiodid($entity);** 
      //$em->persist($pWeek); 
      } 

      $em->persist($entity); 
      $em->flush(); 

      $this->addFlash('error', 'Payroll Period was added.'); 
      $this->addFlash('error', '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(), 
     ); 

     } 

定制库

return $this 
     ->createQueryBuilder('payrollweek') 
     ->select('COUNT(pw)') 
     ->from ('comtwclagripayrollBundle:Payrollweek','pw') 
     ->where ('pw.startdate = :startdate and pw.enddate = :enddate') 
     ->setParameter('startdate', $startdate) 
     ->setParameter('enddate', $enddate) 
     ->getQuery() 
     ->getOneorNullResult(); 
} 
+0

尝试打印的$ payrollweek请 –

+0

结果内容:数组(大小= 1)1 =>字符串 '0'(长度= 1) – Sue

+0

(''COUNT(pw)') - > from('comtwclagripayrollBundle:Payrollweek','pw') - > where('pw.startdate =:startdate and pw.enddate =:enddate') - > setParameter('startdate',$ startdate) - > s etParameter('enddate',$ enddate) - > getQuery() - > getOneorNullResult(); }此查询将计算匹配r =输入的开始和结束日期的行数。不知道这是否是问题 – Sue

回答

0

问题是您要从存储库中返回一个不是实体的计数。

所以,如果你想设置你可以改变你的资料库到这是你的外键:

return $this 
     ->createQueryBuilder('pw') 
     ->select('pw') 
     ->from ('comtwclagripayrollBundle:Payrollweek','pw') 
     ->where ('pw.startdate = :startdate and pw.enddate = :enddate') 
     ->setParameter('startdate', $startdate) 
     ->setParameter('enddate', $enddate) 
     ->getQuery() 
     ->getResult(); 

而且你的控制器里面试试这个:

elseif (null != $payrollweek){ 
    foreach ($payrollweek as $entity) { 
     $pWeek->setPayrollperiodid($entity); 
     $em->persist($pWeek); 
    } 
} 

如果你想指望行,使用另一种功能做到这一点

在你的仓库你可以有这样的事情:

class PayrollweekRepository 
{ 
    public function findBystartdateAndenddate($startdate, $enddate) 
    { 
     return $this 
     ->createQueryBuilder('pw') 
     ->select('pw') 
     ->from ('comtwclagripayrollBundle:Payrollweek','pw') 
     ->where ('pw.startdate = :startdate and pw.enddate = :enddate') 
     ->setParameter('startdate', $startdate) 
     ->setParameter('enddate', $enddate) 
     ->getQuery() 
     ->getResult(); 
    } 

    public function countBystartdateAndenddate($startdate, $enddate) 
    { 
     return $this 
     ->createQueryBuilder('payrollweek') 
     ->select('COUNT(pw)') 
     ->from ('comtwclagripayrollBundle:Payrollweek','pw') 
     ->where ('pw.startdate = :startdate and pw.enddate = :enddate') 
     ->setParameter('startdate', $startdate) 
     ->setParameter('enddate', $enddate) 
     ->getQuery() 
     ->getOneorNullResult(); 
    } 
} 

里面你的控制器,你可以调用这个:

$counter = $em->getRepository('comtwclagripayrollBundle:Payrollweek')->countBystartdateAndenddate($form->get('startdate')->getData(), $form->get('enddate')->getData()); 
+0

嘿亚历山德罗这并没有产生我想要的。但我想知道是否有可能有一段时间在仓库/控制器 – Sue

+0

嘿亚历山德罗是否有可能仍然帮助我 – Sue

+0

你可以有一段时间,但我再说一遍,你的问题不清楚,我的建议是打开一个新的问题与明确的问题,这个问题对我来说是封闭的,尝试开放一个新的明确的问题,我会帮你:) –

相关问题