Symfony 教条没有';我找不到排得满满的

Symfony 教条没有';我找不到排得满满的,symfony,doctrine-orm,doctrine,Symfony,Doctrine Orm,Doctrine,我有3个实体:主题、部分、问题。每个人都与其他人有关系。我正在尝试获取当前$user的问题。如果没有,我用user=NULL复制默认值 但是教义让我头疼。最初,它不会对空用户提出问题。现在,在刷新数据库中的新问题后,将无法获取它们(它们被正确插入) 可能有些东西我没看到 为什么它不能检索新问题 <?php public function getProfileQuestionsForUser( $user ) { $queryBuilder = $this->createQue

我有3个实体:主题、部分、问题。每个人都与其他人有关系。我正在尝试获取当前
$user
的问题。如果没有,我用
user=NULL
复制默认值

但是教义让我头疼。最初,它不会对空用户提出问题。现在,在刷新数据库中的新问题后,将无法获取它们(它们被正确插入)

可能有些东西我没看到

为什么它不能检索新问题

<?php
public function getProfileQuestionsForUser( $user ) {
    $queryBuilder = $this->createQueryBuilder( 's' );
    $query = $queryBuilder
        ->select( 's, sc, q' )
        ->leftJoin( 's.sections', 'sc' )
        ->leftJoin( 'sc.questions', 'q', 'WITH', 'q.user = :USER' )
        ->where( 's.type = :TYPE' )
        ->setParameter( 'USER', $user )
        ->setParameter( 'TYPE', 'profile' )
        ->getQuery();
    $sql = $query->getSQL();

    /** @var SubjectEntity $result */
    $result = $query->getOneOrNullResult();

    $hasQuestions = false;
    foreach ( $result->getSections() as $section ) {
        $qs = count($section->getQuestions());
        if ( count( $section->getQuestions() ) ) {
            $hasQuestions = true;
            break;
        }
    }

    if ( $hasQuestions == false ) {
        $queryBuilder = $this->createQueryBuilder( 's' );
        $query = $queryBuilder
            ->select( 's, q, sc' )
            ->leftJoin( 's.sections', 'sc' )
            ->leftJoin( 's.questions', 'q', 'WITH', 'q.user IS NULL' )
            ->where( 's.type = :TYPE' )
            ->setParameter( 'TYPE', 'profile' )
            ->getQuery();
        $sql = $query->getSQL();

        /** @var SubjectEntity $subject */
        $subject = $query->getOneOrNullResult();

        if ( ! empty( $subject ) ) {
            /** @var QuestionEntity $question */
            $qs = count( $subject->getQuestions() );
            foreach ( $subject->getQuestions() as $question ) {
                $new_question = clone $question;
                $new_question->setUser( $user );
                $new_question->setAnswers( new ArrayCollection() );
                $new_question->setQuestionStatuses( new ArrayCollection() );
                $new_question->setOptions( new ArrayCollection() );
                $this->getEntityManager()->persist( $new_question );
            }
            $this->getEntityManager()->flush();

            // Retrieve new questions from DB
            $queryBuilder = $this->createQueryBuilder( 's' );
            $query = $queryBuilder
                ->select( 's, sc, q' )
                ->leftJoin( 's.sections', 'sc' )
                ->leftJoin( 'sc.questions', 'q', 'WITH', 'q.user = :USER' )
                ->where( 's.type = :TYPE' )
                ->setParameter( 'USER', $user )
                ->setParameter( 'TYPE', 'profile' )
                ->getQuery();
            $sql = $query->getSQL();

            $result = $query->getOneOrNullResult();
        }
    }

    return $result;
}

也许像这样的方法会奏效:

//In your Question entity add this
public function __clone() {
    $this->id = null;
}
并按如下方式修改代码:

        foreach ( $subject->getQuestions() as $question ) {
            $new_question = clone $question;

            $this->getEntityManager()->detach($new_question);

            $new_question->setUser( $user );
            $new_question->setAnswers( new ArrayCollection() );
            $new_question->setQuestionStatuses( new ArrayCollection() );
            $new_question->setOptions( new ArrayCollection() );
            $this->getEntityManager()->persist( $new_question );
        }
        $this->getEntityManager()->flush();
更新
嗯,我还添加了一个

工作:
$subject->addQuestion($new\u question)$新建问题->getSection()->addQuestion($new\u question)