我的数据库中的对象Ticket具有以下结构:
{
"_id" : ObjectId("549803361bac2fa81a000029"),
"amount" : 1,
"price" : 123000,
"phone" : "+111 (11) 111-11-11",
"status" : 1,
"is_admin_added" : 1,
"created" : ISODate("2014-12-22T11:39:52.000Z"),
"event" : {
"_id" : ObjectId("549803361bac2fa81a00002a"),
"name" : "helicopter",
"start_date" : ISODate("2014-12-31T08:11:00.000Z"),
"city" : {
"_id" : ObjectId("549026601bac2f5811000033"),
"name" : "cityname"
}
}
}
这是Ticket对象的yml配置:
Bnv\BnvBundle\Document\Ticket:
fields:
id:
id: true
amount:
type: int
price:
type: int
phone:
type: string
additional:
type: string
status:
type: int
is_admin_added:
type: int
created:
type: date
user_id:
type: int
repositoryClass: Bnv\BnvBundle\Repository\TicketRepository
embedOne:
event:
targetDocument: Event
cascade: all
我可以正常保存新的Ticket对象及其新的后代 - 对象事件和对象城市 - 当我创建Ticket对象时。
但是如果我尝试编辑该值,我无法保存嵌入文件名称的新值。这是我的编辑代码:
$dm = $this->get('doctrine_mongodb')->getManager();
$ticket = $dm->getRepository('BnvBnvBundle:Ticket')->find($id);
$ticket->setPrice($price);
$ticket->setPhone($phone);
$event = $ticket->getEvent();
$event->setName($eventName);
$dm->persist($ticket);
$dm->persist($event);
$dm->flush();
此票证的价格和电话已成功保存,但事件名称未在数据库中更改(事件名称仅在我调试上述代码时在对象中更改,但在刷新后不在数据库中更改)
我无法理解为什么。求助,请理解,原因是什么。谢谢。
答案 0 :(得分:1)
好的,发现了问题。方法
$this->mongoCollection->update($query, $newObj, $options);
vendor/doctrine/mongodb/lib/Doctrine/MongoDB/Collection.php
中的实际上更改了对象事件集合“事件” - 不嵌入对象事件对象票证。所以我认为在mongodb中嵌入文档不适合编辑,或者在告诉symfony事件嵌入文档时我错过了一些设置。
这种行为是由于yml配置中不存在type: embeddedDocument
(第一个字母 - 小写)。没有这个字符串文档每次添加新文档Ticket时,事件都保存在单独的集合中