Symfony,ODM:如何设置乘法ID注释
问题描述:
所以问题是如何提供两个或更多的标识符键?我找不到在谷歌搜索这个问题的任何答案...这里是例子:Symfony,ODM:如何设置乘法ID注释
class Customer
{
/**
* @ODM\Id
*
* @JMS\Expose
* @JMS\Type("string")
*
*/
protected $id;
/**
* @var integer
* @ODM\Id(strategy="INCREMENT")
*
* @JMS\Expose
* @JMS\Type("integer")
*
*/
protected $customerId;
因此,在这种情况下,我有增加,因为我写的第二个ID,但第一个ID成为空。如果我删除并只写* @ODM\Field(type="integer")
一切正常,但没有增量customerId
。那么我怎样才能在文档中找到ID?或者我错了,我不这样做?
答
标识符自动映射为_id
字段,因此只能有一个字段映射为@Id
。
在过去完成类似的事情,我建议保留\MongoId
作为文档标识符,并在代码中生成递增的customerId
,而不是依靠ODM来执行此操作。制作这样的生成器非常简单,您需要连接到持久化文档(无论是在您的域代码中,我建议,还是利用事件),并写入类似于ODM的IncrementGenerator的生成器。
答
你只能有字符串的两个关键一前一整数作为复合键的一部分,按本文件: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/composite-primary-keys.html
所以尝试:
class Customer
{
/**
* @ODM\Id
* @ORM\Column(name="id", type="string")
*
* @JMS\Expose
* @JMS\Type("string")
*
*/
protected $id;
/**
* @var integer
* @ODM\Id(strategy="INCREMENT")
* @ORM\Column(name="customerId", type="integer")
*
* @JMS\Expose
* @JMS\Type("integer")
*
*/
protected $customerId;
我认为应该工作您。
请注意!我不使用ODM,所以ORM符号没有意义,ORM不能实现ODM符号的解决方案。我只使用ODM,只使用mongodb。 –
对不起,您的帖子中有'ORM'的例子,所以我错了。我在网上进行了搜索,我相信ODM原则不支持复合ID。但是,我发现这个链接:http://*.com/questions/7222062/mongodb-composite-key/7225657#7225657这可能会对你有所帮助。如果您认为不合适,我可以删除我的答案,并将该链接中的内容作为答案发布。 –