可捕获的致命错误:类Proxies的对象\ __ CG __ \ AppBundle \ Entity \ Ticket无法转换为字符串

时间:2015-12-04 07:26:48

标签: php symfony relationship

我的项目使用Symfony2时出现问题。是一个'工作日志'项目,具有特定项目的故障单(问题)。但是当我尝试编辑工作日志条目时,我有这个错误:

  

Catchable Fatal Error:类的对象   Proxies__CG __ \ AppBundle \ Entity \ Ticket无法转换为   串

这是我的数据库模型: enter image description here

这是AppBundle / Entity / Worklog /

代码的一部分
/**
 * @var \Ticket
 *
 * @ORM\ManyToOne(targetEntity="Ticket")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="ticket_ticket_id", referencedColumnName="ticket_id")
 * })
 */
private $ticketTicket;

来自AppBundle / Entity / Ticket /

/**
 * @var integer
 *
 * @ORM\Column(name="ticket_id", type="integer", nullable=false)
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="IDENTITY")
 */
private $ticketId;

你知道为什么我有这个错误吗?有什么想法可以提供帮助吗?

工作日志表格:

/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('worklogDate')
        ->add('worklogDuration')
        ->add('worklogDescription')
        ->add('ticketTicket')
    ;
}

/**
 * @param OptionsResolverInterface $resolver
 */
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'AppBundle\Entity\Worklog'
    ));
}

/**
 * @return string
 */
public function getName()
{
    return 'appbundle_worklog';
}

2 个答案:

答案 0 :(得分:1)

问题是您的实体字段没有预期的回报。 尝试添加:

public function __toString()
{
    return (string) $this->getTicket();
}

答案 1 :(得分:0)

为什么不在Form课程中完整声明您的字段。它会像这样:

->add('ticketTicket', 'entity', array(
    'class' => 'AppBundle\Entity\Ticket',
    'property' => 'propertyName', //needed property's name
    'label' => 'choice_field_label'
))

如果您需要更复杂的smth,那么只需查找此字段的所有内容,您可以使用query_builder选项:

->add('ticketTicket', 'entity', array(
    'class' => 'AppBundle\Entity\Ticket',
    'property' => 'propertyName', //needed property's name
    'label' => 'choice_field_label',
    'query_builder' => function(EntityRepository $er) {
        return $er->findAllTicketNames(); 
        //Where findAllTicketNames is the name of method in your
        // ticketRepo which returns queryBuilder, 
        //instead of this you could just write your custom query like
        //$qb = $er->createQueryBuilder('t');
        //$qb->andWhere(...);
        //return $qb;
    } 
))

P.S。
我的答案是从我之前的answer复制而来的,并且根据您的情况添加了一些小修改:)