可捕获的致命错误:类的对象...无法转换为字符串

时间:2015-01-09 19:37:17

标签: php symfony orm doctrine-orm

我正在尝试从“Cours”表中获取所有记录,其中表单提交的$speciality的值是由arrayColloction()的每个单个对象返回的Cours }。我正在使用下一行来获得该结果(但不幸的是它不起作用):

 public function andWhereSpeciality(QueryBuilder $qb, Speciality $speciality )
  {
    $qb
      ->andWhere($qb->expr()->in(':speciality','a.specialities'))
      ->setParameter('speciality', $speciality) ;
    return $qb;
  }

班级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;

执行返回以下错误:

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 

2 个答案:

答案 0 :(得分:1)

我没有对此进行测试,但使用Member of可以解决问题

public function andWhereSpeciality(QueryBuilder $qb, Speciality $speciality )
  {
    $qb
      ->andWhere($qb->expr()->isMemberOf(':speciality','a.specialities'))
      ->setParameter('speciality', $speciality) ;
    return $qb;
  }

答案 1 :(得分:1)

我解决了这个问题,我在这里发布解决方案,它可以帮助别人...... 你必须使用"会员和#34;处理manytomany关系的子句,你可能需要在Expr.php文件中注入以下代码:#/ p>

 /**
 * 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;
  }

希望可以提供帮助。