将datetime字段转换为主键会引发致命错误

时间:2013-09-18 13:49:18

标签: mysql datetime symfony doctrine-orm

我想使用两个外键的组合加上datetime字段作为我的组合主键。

但我得到了

  

Catchable Fatal Error:无法转换类DateTime的对象   串入   C:\开发\ XAMPP \ htdocs中\ happyfaces \供应商\原则\ ORM \ LIB \原则\ ORM \ UnitOfWork.php   第1337行

当我这样做的时候。只要我从YML实体声明中删除id: true,一切都会正常工作。

这里出现的问题是什么?它对我来说似乎是一个Symfony2或Doctrine2错误,因为如果我没有将datetime列声明为主键的一部分,则在数据库中设置日期时间。

任何人都可以提供帮助或建议吗?

1 个答案:

答案 0 :(得分:8)

不可能,也不推荐。主键关注原始数据类型,例如IntegerString。大多数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