Catchable Fatal Error: Object of class...could not be converted to string
Catchable Fatal Error: Object of class...could not be converted to string
我正在尝试从 "Cours" table 获取所有记录,其中表单提交的 $speciality
的值在每个记录返回的 arrayColloction()
中class Cours
的单个对象。我正在使用下一行来获得该结果(但不幸的是它不起作用):
public function andWhereSpeciality(QueryBuilder $qb, Speciality $speciality )
{
$qb
->andWhere($qb->expr()->in(':speciality','a.specialities'))
->setParameter('speciality', $speciality) ;
return $qb;
}
class Cours
具有如下代码中的 ManyToMany
关系:
/**
* @ORM\ManyToMany(targetEntity="BacUp\GeneralBundle\Entity\Speciality", cascade={"persist"})
* @ORM\JoinColumn(nullable=false)
* @Assert\Count(min = 1, minMessage = "You have to choose at least one speciality")
*/
private $specialities;
执行returns出现如下错误:
CRITICAL - Uncaught PHP Exception Symfony\Component\Debug\Exception\ContextErrorException: "Catchable Fatal Error: Object of class BacUp\GeneralBundle\Entity\Speciality could not be converted to string in C:\wamp\www\Symfony\vendor\doctrine\orm\lib\Doctrine\ORM\Query\Expr.php line 452" at C:\wamp\www\Symfony\vendor\doctrine\orm\lib\Doctrine\ORM\Query\Expr.php line 452
我没有对此进行测试,但使用 Member of
应该可以解决问题
public function andWhereSpeciality(QueryBuilder $qb, Speciality $speciality )
{
$qb
->andWhere($qb->expr()->isMemberOf(':speciality','a.specialities'))
->setParameter('speciality', $speciality) ;
return $qb;
}
我解决了这个问题,我 post 这里的解决方案,它也许可以帮助其他人...
您必须使用 "MEMBER OF" 子句来处理多对多关系,并且您可能需要直接在 Expr.php 文件中注入以下代码:
/**
* Creates an instance of MEMBER OF function, with the given arguments.
*
* @param string $x Value to be checked
* @param string $y Value to be checked against
*
* @return string
*/
public function isMemberOf($x, $y)
{
return $x . ' MEMBER OF ' . $y;
}
有关更多信息,请继续here(也许您还需要使用 INSTANCE OF?方法同上)
现在,在我的代码中,我使用了 "isMemberOf" 函数并且工作正常。
public function andWhereSpeciality(QueryBuilder $qb, Speciality $speciality )
{
$qb
->andWhere($qb->expr()->isMemberOf(':speciality','a.specialities'))
->setParameter('speciality', $speciality) ;
return $qb;
}
希望能帮到你。
我正在尝试从 "Cours" table 获取所有记录,其中表单提交的 $speciality
的值在每个记录返回的 arrayColloction()
中class Cours
的单个对象。我正在使用下一行来获得该结果(但不幸的是它不起作用):
public function andWhereSpeciality(QueryBuilder $qb, Speciality $speciality )
{
$qb
->andWhere($qb->expr()->in(':speciality','a.specialities'))
->setParameter('speciality', $speciality) ;
return $qb;
}
class Cours
具有如下代码中的 ManyToMany
关系:
/**
* @ORM\ManyToMany(targetEntity="BacUp\GeneralBundle\Entity\Speciality", cascade={"persist"})
* @ORM\JoinColumn(nullable=false)
* @Assert\Count(min = 1, minMessage = "You have to choose at least one speciality")
*/
private $specialities;
执行returns出现如下错误:
CRITICAL - Uncaught PHP Exception Symfony\Component\Debug\Exception\ContextErrorException: "Catchable Fatal Error: Object of class BacUp\GeneralBundle\Entity\Speciality could not be converted to string in C:\wamp\www\Symfony\vendor\doctrine\orm\lib\Doctrine\ORM\Query\Expr.php line 452" at C:\wamp\www\Symfony\vendor\doctrine\orm\lib\Doctrine\ORM\Query\Expr.php line 452
我没有对此进行测试,但使用 Member of
应该可以解决问题
public function andWhereSpeciality(QueryBuilder $qb, Speciality $speciality )
{
$qb
->andWhere($qb->expr()->isMemberOf(':speciality','a.specialities'))
->setParameter('speciality', $speciality) ;
return $qb;
}
我解决了这个问题,我 post 这里的解决方案,它也许可以帮助其他人... 您必须使用 "MEMBER OF" 子句来处理多对多关系,并且您可能需要直接在 Expr.php 文件中注入以下代码:
/**
* Creates an instance of MEMBER OF function, with the given arguments.
*
* @param string $x Value to be checked
* @param string $y Value to be checked against
*
* @return string
*/
public function isMemberOf($x, $y)
{
return $x . ' MEMBER OF ' . $y;
}
有关更多信息,请继续here(也许您还需要使用 INSTANCE OF?方法同上) 现在,在我的代码中,我使用了 "isMemberOf" 函数并且工作正常。
public function andWhereSpeciality(QueryBuilder $qb, Speciality $speciality )
{
$qb
->andWhere($qb->expr()->isMemberOf(':speciality','a.specialities'))
->setParameter('speciality', $speciality) ;
return $qb;
}
希望能帮到你。