Symfony 错误:对字符串调用成员函数setPayrollperiodid()

Symfony 错误:对字符串调用成员函数setPayrollperiodid(),symfony,Symfony,我有一个错误,当我尝试创建一个记录时,它给了我这个错误,错误:调用C:\wamp64\www\AgripayrollsystemV2\AgriPayrollSystem\src\com\twcl\agripayrollBundle\Controller\PayrollperiodController.php中字符串上的成员函数setPayrollId()。此行:*$pWeek->setPayrollperiodid($entity);** 实体 <?php namespace c

我有一个错误,当我尝试创建一个记录时,它给了我这个错误,错误:调用C:\wamp64\www\AgripayrollsystemV2\AgriPayrollSystem\src\com\twcl\agripayrollBundle\Controller\PayrollperiodController.php中字符串上的成员函数setPayrollId()。此行:*$pWeek->setPayrollperiodid($entity);**

实体

    <?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();

    }



}
 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();
}
自定义存储库

    <?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();

    }



}
 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();
}

问题是您正在从存储库返回计数而不是实体

因此,如果要设置外键,可以将存储库更改为:

 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());

尝试打印$payrollweek pleaseresults:array(size=1)1=>string“0”(length=1)在我添加此查询之前,打印效果良好返回$this->createQueryBuilder('payrollweek')->select('COUNT(pw))->from('comtwclagripayrollBundle:payrollweek','pw')->其中('pw.startdate=:startdate和pw.enddate=:enddate')->setParameter('startdate',$startdate)->setParameter('enddate',$enddate)->getQuery()->getOneorNullResult()}此查询用于计算与输入的开始日期和结束日期r=匹配的行数。不知道这是否是问题所在。这是错误,您正试图在pWeek为“0”的位置调用setPayrollperiodid。我不知道为什么,但我假设在您的方法中,findBystartdateAndenddate(如果您编写了它)有点不对劲,或者在实体内部,所以它不应该是for循环,那么我如何修复它们?Alessandro这没有产生我想要的。但是我想知道是否有可能在存储库/控制器中呆一段时间?Hey Alessandro还有可能帮我吗?你可以呆一段时间,但我重复一下,你的问题不清楚,我的建议是ion将以清晰的问题开始一个新问题,这个问题对我来说已经结束,尝试以清晰的问题开始一个新问题,我将帮助你:)嘿,亚历山德罗,我已经创建了一个新问题,你能帮我解决吗?请尽快,我将尝试回答