gpt4 book ai didi

php - 在使用 Doctrine MongoDB ODM 时如何存储 ObjectId?

转载 作者:可可西里 更新时间:2023-11-01 09:09:11 25 4
gpt4 key购买 nike

我想手动存储引用而不是让 ODM 使用 DBRef 类型。

我可以选择将要引用的 _id 存储为 @String(例如 - "4e18e625c2749a260e000024"),但我该如何在该字段中存储 ObjectId 的实例呢?

new \MongoId("4e18e625c2749a260e000024") <-- what's the annotation for this type?

使用 MongoId 对象而不是字符串来保存它会在这个字段上节省一半的空间。它与 @Id 注释使用的数据类型相同,但 @Id 只能在文档中使用一次。

完成此操作的正确注解是什么?

最佳答案

更新:现在官方支持这种类型。在注释中使用 @ObjectId@Field(type="object_id") 以使用 ObjectId/MongoId 类型。无需使用以下解决方案。

此外,使用来自 github.com/doctrine/mongodb-odm 的最新主代码,避免使用网站上的版本(它已过时)。


解决方案(已弃用)

看起来还没有对此的支持。我在 IRC channel 上讨论了这个问题,并在这里开了一张票:https://github.com/doctrine/mongodb-odm/issues/125

一个临时的解决办法是定义一个自定义类型,并在您的文档类中使用像 @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' );

关于php - 在使用 Doctrine MongoDB ODM 时如何存储 ObjectId?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6644033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com