Symfony 错误:对字符串调用成员函数setPayrollperiodid()
我有一个错误,当我尝试创建一个记录时,它给了我这个错误,错误:调用C:\wamp64\www\AgripayrollsystemV2\AgriPayrollSystem\src\com\twcl\agripayrollBundle\Controller\PayrollperiodController.php中字符串上的成员函数setPayrollId()。此行:*$pWeek->setPayrollperiodid($entity);** 实体Symfony 错误:对字符串调用成员函数setPayrollperiodid(),symfony,Symfony,我有一个错误,当我尝试创建一个记录时,它给了我这个错误,错误:调用C:\wamp64\www\AgripayrollsystemV2\AgriPayrollSystem\src\com\twcl\agripayrollBundle\Controller\PayrollperiodController.php中字符串上的成员函数setPayrollId()。此行:*$pWeek->setPayrollperiodid($entity);** 实体 <?php namespace c
<?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将以清晰的问题开始一个新问题,这个问题对我来说已经结束,尝试以清晰的问题开始一个新问题,我将帮助你:)嘿,亚历山德罗,我已经创建了一个新问题,你能帮我解决吗?请尽快,我将尝试回答