【发布时间】:2013-10-11 17:42:55
【问题描述】:
我的问题参考Doctrine many-to-many relations and onFlush event
作者实体:http://pastebin.com/GBCaSA4Z 图书实体:http://pastebin.com/Xb2SEiaQ
我运行这段代码:
$book = new \App\CoreBundle\Entity\Books();
$book->setTtile('book title: '.uniqid());
$book->setIsbn('book isbn: '.uniqid());
$author = new \App\CoreBundle\Entity\Authors();
$author->setName('author title: '.uniqid());
$author->addBook($book);
$entityManager->persist($author);
$entityManager->flush();
这样就一切OK了。 Doctrine 生成三个查询:create author、create book 和 create links at author_books。
但我需要在 onFlush 事件中分离和序列化所有实体,并将它们保存在 NoSQL 数据库中。然后其他脚本将反序列化所有这些实体并将它们保存到数据库中。并且通过这种方式,Doctrine 只生成了两个 SQL 查询:create book 和 create author。我应该怎么做教义也生成链接表的SQL查询?
这里是反序列化实体的部分脚本:
foreach ($serializedEntities as $serializedEntity)
{
$detachedEtity = unserialize($serializedEntity);
$entity = $entityManager->merge($detachedEtity);
//$entityManager->persist($entity)
}
$entityManager->flush();
更新: 我总是收到这样的错误:
Notice: Undefined index: 000000002289c17b000000003937ebb0 in /app/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php line 2776
【问题讨论】:
-
哇,这似乎是个非常糟糕的主意。你为什么不实现一个更高级别的服务,由学说 orm 和 nosql/queue 组成,而不是黑客学说?
-
此服务可以实现 ObjectManager 或扩展 ObjectManagerDecorator(如果您愿意)。此服务将推迟持久调用(如果需要,可以通过序列化)。
-
但坦率地说,我不明白你的目标?
-
我不破解教义。序列化和反序列化中的任何问题。有什么方法可以在执行之前获取所有生成的 SQL 查询?
-
是的,我知道您不会“破解”学说,但您使用松散耦合的事件驱动流,几乎不需要耦合行为。
标签: php symfony serialization doctrine-orm entities