【问题标题】:Bidirectional reference does not work Symfony2双向引用不起作用 Symfony2
【发布时间】:2015-06-22 10:56:05
【问题描述】:

我正在使用 Sonata Admin Bundle 创建后端,但我遇到了一对多问题: 我有引用一个“QuizzPart”的“问题”文档:

/**
*@MongoDB\ReferenceOne(targetDocument="QuizzPart", inversedBy="questions") 
*/
protected $quizzPart ;

“QuizzPart”文档引用了许多问题:

/**
 * @var ArrayCollection
 * @MongoDB\ReferenceMany(targetDocument="Question",  mappedBy="quizzpart", cascade="all")
 */
protected $questions = array();

这就是我如何将 QuizzPart 添加到与奏鸣曲管理员的问题中:

$formMapper->add('quizzPart', 'sonata_type_model', array('by_reference' => true,
'required' => false)) ;

但是当我添加一个问题并设置它的 QuizzPart 时,Quizzpart 中没有该问题的引用: 这是 QuizzPart 设置方法:

public function setQuizzPart(\ATS\QuizzBundle\Document\QuizzPart $quizzPart)
  {

    $this->quizzPart = $quizzPart;
    $quizzPart->addQuestion($this);

    return $this;
  }

问题没有添加到 QuizzPart 对象中,任何人都可以帮忙吗?

【问题讨论】:

    标签: mongodb symfony doctrine-orm sonata-admin database


    【解决方案1】:

    您需要更改将测验部分添加到问题实体的方式。它应该是这样的:

    public function addQuizzPart(QuizzPart $quizzPart)
    {
        $this->quizzParts->add($quizzPart);
        $quizzPart->setQuestion($this); //This way the entities are "connected"        
    
        return $this;
    }
    

    【讨论】:

    • 这正是我正在做的@Stiven,但它的对象 QuizzPart 没有在数据库中更新
    • quizzPart 的 flush() 操作似乎没有执行
    • 尝试创建您的by_reference => false。您的问题实体正在尝试使用 setQuizzPart 而不是 addQuizzPart
    • 一个问题只引用一个 quizzPart 所以没有 addQuizzPart !它是一个 setQuizzPart
    • 表单选项by_reference与对象引用关系不大。看看this
    猜你喜欢
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 2014-04-10
    • 2011-10-14
    • 2014-03-12
    • 1970-01-01
    相关资源
    最近更新 更多