gpt4 book ai didi

php - Doctrine MongoDb Embedded Document - 如何指定字段

转载 作者:IT老高 更新时间:2023-10-28 13:36:38 25 4
gpt4 key购买 nike

我正在使用带有 Doctrine MongoDb 包的 Symfony 2。

有两个类有映射:

/**
* @MongoDB\Document
*/
class Consultant
{
/**
* @MongoDB\Id(strategy="NONE")
*/
protected $id;

/**
* @MongoDB\EmbedMany(targetDocument="Specialization", strategy="set")
*/
protected $specs;
}

/**
* @MongoDB\Document
*/
class Specialization
{
/**
* @MongoDB\Id
*/
protected $id;

/**
* @MongoDB\String
*/
protected $name;

/**
* @MongoDB\Boolean
*/
protected $visible = true;
}

保存顾问后,Mongo 记录如下:

{
"_id": "1",
"name": "Manager",
"specs": {
"0": {
"_id": ObjectId("50d071ac6146a1f342000001"),
"name": "Support",
"visible": false
},
"1": {
"_id": ObjectId("50d069336146a10244000000"),
"name": "Orders",
"visible": false
}
}
}

除了冗余字段“可见”之外,一切都很好。

有没有办法使用 @EmbedMany 注释来指定 Doctrine 应该嵌入哪些字段?

最佳答案

特化类使用 Document映射,不适用于嵌入。您应该使用 EmbeddedDocument为此。

鉴于您想单独使用同一个类并以嵌入形式使用,最好创建一个带有 MappedSuperclass 注释的抽象类.在那里,您可以定义文档和嵌入文档中应该存在的任何字段映射。在您的情况下,您可以在继承文档类上定义 visible

另外,请注意,通过使用 set 策略,您将嵌入的集合存储为对象而不是通常的数组。如果您打算在非规范化的嵌入式文档中索引字段,这可能会产生影响,因为您将无法使用 multikey indexing .也可以在数字键之间创建间隙。

关于php - Doctrine MongoDb Embedded Document - 如何指定字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13946840/

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