我想使用两个外键的组合加上datetime字段作为我的组合主键。
但我得到了
Catchable Fatal Error:无法转换类DateTime的对象 串入 C:\开发\ XAMPP \ htdocs中\ happyfaces \供应商\原则\ ORM \ LIB \原则\ ORM \ UnitOfWork.php 第1337行
当我这样做的时候。只要我从YML实体声明中删除id: true
,一切都会正常工作。
这里出现的问题是什么?它对我来说似乎是一个Symfony2或Doctrine2错误,因为如果我没有将datetime列声明为主键的一部分,则在数据库中设置日期时间。
任何人都可以提供帮助或建议吗?
答案 0 :(得分:8)
不可能,也不推荐。主键关注原始数据类型,例如Integer
或String
。大多数RDMS系统更喜欢Integer
作为最高性能的主键。
看看:http://doctrine-orm.readthedocs.org/en/2.1/tutorials/composite-primary-keys.html
也许通过添加新的Doctrine数据类型可以解决方法。使用__toString()
函数,但我认为Doctrine将强制您仅使用原始数据类型。
class Foo
{
private $bar = 'test';
public function __toString()
{
return $this->bar;
}
}
echo new Foo();
您的错误通常意味着DateTime
没有__toString()
功能或与字符串不兼容。我从未测试它使用自定义数据类型作为主键。所以你要亲自尝试一下。
看看:http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/types.html
另一种尝试是使用String
作为主键,并使用
id
$entity->setId(new \DateTime()->format('yyyy/mm/dd'));
以下是一个类似的问题:Symfony/Doctrine: DateTime as primary key