【发布时间】:2014-06-04 21:07:12
【问题描述】:
我遇到了一些奇怪的事情:
我通过app/console doctrine:generate:entity创建了三个学说实体:
- 类别
- 用户
- 发布
我设置了关系,并且所有设备数据都可以正常工作 (app/console doctrine:fixtures:load)。
一篇文章属于一个类别 (category_id),并且有一个作者 (user_id)。
我使用 app/console doctrine:generate:crud 为我的所有实体获取 CRUD 操作。
当我更新帖子时,我收到了这个奇怪的错误:
ContextErrorException: Catchable Fatal Error: Object of class Proxies__CG__...\BlogBundle\Entity\Category 无法转换为字符串
为了正确显示我在PostType() 中使用的下拉字段:
$builder ....
->add('categoryId','entity', array(
'class' => 'HotelBlogBundle:Category',
'property'=>'name'
))
->add('userId','entity',array(
'class'=>'UserBundle:User',
'property'=>'username'
))
由于我指定了property 选项,因此我的实体类中不需要__toString()。
如果我像这样创建__toString()(在类别和用户实体中),错误就会消失并且有效:
public function __toString()
{
return (string) $this->getId();
}
我不确定我的做法是否正确。
此外,由于 Category 和 User 对象被传递给 category_id 和 user_id 字段,Doctrine(或 Symfony)应该能够找出 id 列。我错过了什么?还有其他方法吗?
【问题讨论】:
-
它应该可以工作,你有实体类中该字段的公共getter函数吗?
-
是的,所有实体 getter 在两个类中都是公共的。
-
从你所说的一切来看,我看不出任何错误。
-
没有
__toString()是行不通的。如果我需要__toString()到return (string) $this->getName();怎么办?在那种情况下我会怎么做?您将如何处理? -
您在
PostType中使用了categoryId,但该字段名为category_id。也许这是问题的原因。我个人更喜欢在命名字段时忽略_id,因为这些字段返回实体而不是id。例如$postType->getCategory()返回一个Category对象,而不仅仅是一个 id。
标签: php symfony orm doctrine tostring