Symfony,ODM:如何设置 multiply ids 注释
Symfony, ODM: how to set multiply ids annotation
那么问题是如何提供两个或多个标识符键?我在 google 搜索中找不到关于这个问题的任何答案...这是示例:
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呢?或者我错了,我没有这样做?
根据本文档,您只能有两个键,一个是字符串,另一个是整数作为复合键的一部分:
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;
我认为这对你有用。
标识符自动映射为 _id
字段,因此只能有 1 个字段映射为 @Id
。
过去做过类似的事情,我建议保留 \MongoId
作为文档标识符并在代码中生成递增的 customerId
而不是依赖 ODM 来这样做。制作这样的生成器非常简单,您需要连接持久文档(无论是在您的域代码中,我建议,还是利用 prePersist
事件)并编写类似于 ODM 的 IncrementGenerator.[=16 的生成器=]
那么问题是如何提供两个或多个标识符键?我在 google 搜索中找不到关于这个问题的任何答案...这是示例:
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呢?或者我错了,我没有这样做?
根据本文档,您只能有两个键,一个是字符串,另一个是整数作为复合键的一部分: 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;
我认为这对你有用。
标识符自动映射为 _id
字段,因此只能有 1 个字段映射为 @Id
。
过去做过类似的事情,我建议保留 \MongoId
作为文档标识符并在代码中生成递增的 customerId
而不是依赖 ODM 来这样做。制作这样的生成器非常简单,您需要连接持久文档(无论是在您的域代码中,我建议,还是利用 prePersist
事件)并编写类似于 ODM 的 IncrementGenerator.[=16 的生成器=]