带有手册参考的 Doctrine ODM
Doctrine ODM with manual reference
假设我们有以下文档以及它们之间的关系:
/**
* @ODM\Document(collection="foo")
*/
class Foo
{
/** @ODM\Id(name="_id", strategy="NONE", type="string") */
public $id;
/** @ODM\Field(name="name", type="string") */
public $name;
/**
* @ODM\ReferenceOne(targetDocument="Bar")
*/
public $bar;
}
/**
* @ODM\Document(collection="bar")
*/
class Bar
{
/** @ODM\Id(name="_id", strategy="NONE", type="string") */
public $id;
/** @ODM\Field(name="name", type="string") */
public $name;
}
以及以下代码:
$foo = new Foo();
$foo->id = uniqid();
$foo->name = 'thefoo';
$bar = new Bar();
$bar->id = uniqid();
$bar->name = 'thebar';
$foo->bar = $bar;
$dm->persist($bar);
$dm->persist($foo);
$dm->flush();
在这种情况下,与 "Bar" 的关系将以 dbRefs 格式存储在 mongo 中。
{
"_id" : "58ac22815e49d",
"name" : "thefoo",
"bar" : {
"$ref" : "bar",
"$id" : "58ac22815e59a",
"$db" : "mydb"
}
}
但是我想要做的是以这种格式存储关系 "manually":
{
"_id" : "58ac22815e49d",
"name" : "thefoo",
"bar_id" : "58ac22815e59a"
}
在 Doctrine ODM 中有没有一种方法可以映射我的文档以存储这种格式的关系?
编辑:感谢 malarzm 的 我通过以下映射实现了预期的结果。
/**
* @ODM\Document(collection="foo")
*/
class Foo
{
/** @ODM\Id(name="_id", strategy="NONE", type="string") */
public $id;
/**
* @ODM\ReferenceOne(name="bar_id", targetDocument="Bar", storeAs="id")
*/
public $bar;
/** @ODM\Field(name="name", type="string") */
public $name;
}
要让 ODM 仅存储引用文档的 ID,您需要将 storeAs="id"
添加到引用映射中,有关详细信息,请参阅文档中的 Storing References 章节。
假设我们有以下文档以及它们之间的关系:
/**
* @ODM\Document(collection="foo")
*/
class Foo
{
/** @ODM\Id(name="_id", strategy="NONE", type="string") */
public $id;
/** @ODM\Field(name="name", type="string") */
public $name;
/**
* @ODM\ReferenceOne(targetDocument="Bar")
*/
public $bar;
}
/**
* @ODM\Document(collection="bar")
*/
class Bar
{
/** @ODM\Id(name="_id", strategy="NONE", type="string") */
public $id;
/** @ODM\Field(name="name", type="string") */
public $name;
}
以及以下代码:
$foo = new Foo();
$foo->id = uniqid();
$foo->name = 'thefoo';
$bar = new Bar();
$bar->id = uniqid();
$bar->name = 'thebar';
$foo->bar = $bar;
$dm->persist($bar);
$dm->persist($foo);
$dm->flush();
在这种情况下,与 "Bar" 的关系将以 dbRefs 格式存储在 mongo 中。
{
"_id" : "58ac22815e49d",
"name" : "thefoo",
"bar" : {
"$ref" : "bar",
"$id" : "58ac22815e59a",
"$db" : "mydb"
}
}
但是我想要做的是以这种格式存储关系 "manually":
{
"_id" : "58ac22815e49d",
"name" : "thefoo",
"bar_id" : "58ac22815e59a"
}
在 Doctrine ODM 中有没有一种方法可以映射我的文档以存储这种格式的关系?
编辑:感谢 malarzm 的
/**
* @ODM\Document(collection="foo")
*/
class Foo
{
/** @ODM\Id(name="_id", strategy="NONE", type="string") */
public $id;
/**
* @ODM\ReferenceOne(name="bar_id", targetDocument="Bar", storeAs="id")
*/
public $bar;
/** @ODM\Field(name="name", type="string") */
public $name;
}
要让 ODM 仅存储引用文档的 ID,您需要将 storeAs="id"
添加到引用映射中,有关详细信息,请参阅文档中的 Storing References 章节。