Doctrine2Merge()使用复合索引失败| Doctrine2 Bug



当我合并以下使用复合索引的分离的UserAnswer对象时,如果并且仅当我在对象中有一个为外键/映射实体为非外键/映射实体的索引时,合并才会失败。如果复合索引只包括外键或只包括非外键,则合并有效。

我认为这是一个Doctrine2错误。如果没有,我做错了什么?

Doctrine2版本:2.3.4

下面的控制器代码保存UserAnswer对象类型,在以下代码块中进行了描述:

$entityManager = $this->getDoctrine()->getManager();
$userAnswer = new UserAnswer();
$userAnswer->setUser($this->getUser());
$userAnswer->setAnswerType(1);
$userAnswer->setQuestion($entityManager->getReference('AcmeBundle:Question',1));
$entityManager->detach($userAnswer);
$entityManager->merge($userAnswer);
try {
    $entityManager->flush();
} catch (DoctrineDBALDBALException $e) {
...

UserAnswer对象:

/**
 * @ORMEntity
 * @ORMTable(name="userAnswers")
 */
class UserAnswer
{
    /**
     * @ORMId
     * @ORMManyToOne(targetEntity="User")
     */
    protected $user;
    /**
     * @ORMId
     * @ORMManyToOne(targetEntity="Question")
     */
    protected $question;
    /**
     * @ORMId
     * @ORMColumn(name="answer_type", type="integer")
     */
    protected $answer_type;
...

这是我收到的错误:

的查询缺少标识符answer_typeAcmeBundle\Entity\UserAnswer

500内部服务器错误-ORMException

堆栈跟踪

在/流浪者/Symfony/vender/doctory/orm/lib/Doctory/orm/ORMException.php在第160行-

public static function missingIdentifierField($className, $fieldName)
{
    return new self("The identifier $fieldName is missing for a query of " . $className);
}
public static function overwriteInternalDQLFunctionNotAllowed($functionName)

在ORMException处::在第380+行的/foarant/Symfony/vvendor/domeric/orm/lib/doctrine/orm/EntityManager.php中缺少IdentifierField('Acme\Entity\UserAnswer','swer_type')

在EntityManager->find('Acme\Entity\UserAnswer',array('user'=>'1','question'=>'1')),位于/varrant/Symfony/vendor/domaine/orm/lib/doctrine/OM/UnitOfWork.php的1787+行

在UnitOfWork->doMerge(object(UserAnswer),array('00000000025cf950300000006ed40a0a'=>object

在UnitOfWork->merge(object(UserAnswer))中,位于/advant/Symfony/vendor/domine/orm/lib/doctrine/OM/EntityManager.php的638+行

在EntityManager->merge(object(UserAnswer))中,位于第23+行的/varrant/Symfony/src/Acme/Controller/UserAnswerController.php

在kernel.root_dir/bootstrap.hp.cache中的call_user_func_array(array(object(UserAnswerController),'postAction'),array())的2815+行

在kernel.root_dir/bootstrap.hp.cache中的HttpKernel->handleRaw(对象(请求),'1'),第2789+行

在kernel.root_dir/bootstrap.hp.cache的第2918+行的HttpKernel->句柄(object(Request),'1',true)

在kernel.root_dir/bootstrap.hp.cache中的ContainerwareHttpKernel->句柄(对象(请求),'1',true),位于2220+行

在Kernel->handle(object(Request))中,位于/advant/Symfony/web/app_dev.php的第31行+

UserAnswer不会产生上述控制器代码的错误:

/**
 * @ORMEntity
 * @ORMTable(name="userAnswers")
 */
class UserAnswer
{
    /**
     * @ORMId
     * @ORMManyToOne(targetEntity="User")
     */
    protected $user;
    /**
     * @ORMId
     * @ORMManyToOne(targetEntity="Question")
     */
    protected $question;
    /**
     * @ORMColumn(name="answer_type", type="integer")
     */
    protected $answer_type;
...

这个也没有:

/**
 * @ORMEntity
 * @ORMTable(name="userAnswers")
 */
class UserAnswer extends ApiObject
{
    /**
     * @ORMId
     * @ORMColumn(name="userid", type="integer")
     */
    protected $userid;
    /**
     * @ORMId
     * @ORMColumn(name="question_id", type="integer")
     */
    protected $question_id;
    /**
     * @ORMId
     * @ORMColumn(name="answer_type", type="integer")
     */
    protected $answer_type;
...

这个Doctrine2错误,在Doctrine2.4.2版本中修复,截至本文撰写之时,该版本尚未发布。(请参见http://www.doctrine-project.org/jira/browse/DDC-2645.)

然而,修复程序非常易于实现:https://github.com/Exeu/doctrine2/commit/edab2b6a9670dda3127f457205c7720611d6a6c9

看起来这可能与一个已知的条令问题有关,并在2.3.4:版本中修复

http://www.doctrine-project.org/jira/browse/DDC-2645

相关内容

  • 没有找到相关文章

最新更新