我正在使用Doctrine for typo3 / cms项目来增强后端工作流程的功能。
所以我必须自己开始教义。它的大部分内容非常简单,我根本没有问题。但是当谈到坚持现有的实体时,我仍然坚持不懈。每当我坚持一个现有的实体时,它就被创建为一个新实体。
经过一番挖掘后我得出结论,那不是“UnitOfWork”的一部分( - > contains(entity)== false)。如果我在这个单元内手动注册它,一切都工作正常。
$this->entityManager->getUnitOfWork()->registerManaged($page, array('uid' => $page->getUid()), array('title' => $page->getTitle()));
但这不可能是故事的结尾..所以我仍然试图找出我的学说有什么不对的地方:D
为什么我的诱惑不被管理?
这是我的DoctrineLoader:
private function createEntityManager()
{
global $GLOBALS;
$paths = array(
MyT3Extension::rootDir() . '/Configuration/ORM'
);
$isDevMode = true;
$typoDbConfig = $GLOBALS['TYPO3_CONF_VARS']['DB'];
// the connection configuration
$dbParams = array(
'driver' => 'pdo_mysql',
'user' => $typoDbConfig['username'],
'password' => $typoDbConfig['password'],
'dbname' => $typoDbConfig['database'],
'charset' => 'utf8'
);
$config = Setup::createYAMLMetadataConfiguration($paths, $isDevMode, MyT3Extension::rootDir() . '/Cache');
$entityManager = EntityManager::create($dbParams, $config);
return $entityManager;
}
orm模型的Yml定义:
Vendor\TypoBundle\Entity\Page:
type: entity
table: pages
id: { uid: { type: integer, generator: { strategy: AUTO } } }
fields:
pid: { type: integer }
title: { type: string }
navTitle: { type: string, column: nav_title }
doctype: { type: integer, column: doktype }
isSiteroot: { type: boolean, column: is_siteroot }
layout: { type: integer }
usuage的示例代码是:
$page = $this->entityManager->getRepository('Vendor\TypoBundle\Entity\Page')->findOneBy(array());
$page->setTitle('Test');
$this->entityManager->persist($page);
$this->entityManager->flush(); // will create a new record (new uid)
有什么用呢:
$page = $this->entityManager->getRepository('Vendor\TypoBundle\Entity\Page')->findOneBy(array());
$this->entityManager->getUnitOfWork()->registerManaged(
$page,
array(
'uid' => $page->getUid()
), array(
'title' => $page->getTitle()
)
);
$page->setTitle('Test');
$this->entityManager->persist($page);
$this->entityManager->flush();
所以..我希望任何人都可以帮助我:D(我将在教条symfony包中寻找解决方案..)
答案 0 :(得分:3)
好的..我找到了解决方案..我使用了特殊的依赖注入"技术"在typo3 extbase中。 如果您将依赖项指定为__concstruct()的参数,则它将注入服务而无需进一步配置。所以我只是假设它使用内部的服务总线'使用相同的对象实例来提供所有依赖项,而是为每个依赖项请求创建一个。
所以我有三个不同的实体经理......显然不知道管理实体......很抱歉打扰了你们。