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