[英]How do you store an ObjectId while using Doctrine MongoDB ODM?
我想手动存储引用而不是让 ODM 使用 DBRef 类型。
我可以选择将要引用的 _id 存储为 @String(例如 - "4e18e625c2749a260e000024" ),但是如何在此字段中存储ObjectId
的实例呢?
new \MongoId("4e18e625c2749a260e000024") <-- what's the annotation for this type?
使用 MongoId object 而不是字符串保存它可以节省我一半的空间。 它与 @Id 注释使用的数据类型相同,但 @Id 在 Document 中只能使用一次。
完成此操作的正确注释是什么?
更新:现在有对这种类型的官方支持。 在注释中使用@ObjectId
或@Field(type="object_id")
以使用 ObjectId / MongoId 类型。 无需使用以下解决方案。
另外,请使用来自 github.com/doctrine/mongodb-odm 的最新主代码,并避免使用网站上的版本(它已过时)。
解决方案(已弃用)
似乎还没有对此的支持。 我在 IRC 频道上讨论过这个问题,并在这里开票: https://github.com/doctrine/mongodb-odm/issues/125
临时解决方法是定义自定义类型并在 Document 类中使用@Field(type="objectid")
类的注释。
这是我用来完成此操作的自定义类型的代码。
/**
* Custom Data type to support the MongoId data type in fields
*/
class ObjectId extends \Doctrine\ODM\MongoDB\Mapping\Types\Type
{
public function convertToDatabaseValue($value)
{
if ($value === null) {
return null;
}
if ( ! $value instanceof \MongoId) {
$value = new \MongoId($value);
}
return $value;
}
public function convertToPHPValue($value)
{
return $value !== null ? (string)$value : null;
}
}
注册它使用
\Doctrine\ODM\MongoDB\Mapping\Types\Type::addType('objectid', 'ObjectId' );
尝试:
/** @Id(strategy="NONE") */
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.