Symfony 3 中 ArrayCollection 的随机顺序
Random order for ArrayCollection in Symfony 3
这是我的 Question
实体的一部分:
/**
* @ORM\OneToMany(targetEntity="Answer", mappedBy="question", cascade={"all"})
*/
private $options;
这是 Answer
实体的一部分:
/**
* @ORM\Column(name="answer", type="text")
*/
private $option;
这是获取随机问题的存储库:
public function findQuestionsForQuiz($quantity = 0)
{
// get the lowest id
$lowestId = $this->createQueryBuilder('q')
->select('q.id')
->orderBy('q.id', 'ASC')
->setMaxResults(1)
->getQuery()
->getSingleScalarResult()
;
// get the total number of questions
$totalRows = $this->createQueryBuilder('q')
->select('COUNT(q.id)')
->getQuery()
->getSingleScalarResult()
;
$randomQuestionIds = $this->uniqueRandomNumbersWithinRange($lowestId, $totalRows+$lowestId, $quantity);
$qb = $this->createQueryBuilder('q')
->where('q.id IN(:ids)')
->setParameter('ids', $randomQuestionIds)
->getQuery()
;
return $qb->getResult();
}
虽然这工作正常,但我一直在尝试让答案随机排序,但我不太确定该怎么做。
您可以简单地洗牌与答案相关的实体。例如:
$entries = $question->getOptions()->toArray();
shuffle($entries);
希望对您有所帮助
这是我的 Question
实体的一部分:
/**
* @ORM\OneToMany(targetEntity="Answer", mappedBy="question", cascade={"all"})
*/
private $options;
这是 Answer
实体的一部分:
/**
* @ORM\Column(name="answer", type="text")
*/
private $option;
这是获取随机问题的存储库:
public function findQuestionsForQuiz($quantity = 0)
{
// get the lowest id
$lowestId = $this->createQueryBuilder('q')
->select('q.id')
->orderBy('q.id', 'ASC')
->setMaxResults(1)
->getQuery()
->getSingleScalarResult()
;
// get the total number of questions
$totalRows = $this->createQueryBuilder('q')
->select('COUNT(q.id)')
->getQuery()
->getSingleScalarResult()
;
$randomQuestionIds = $this->uniqueRandomNumbersWithinRange($lowestId, $totalRows+$lowestId, $quantity);
$qb = $this->createQueryBuilder('q')
->where('q.id IN(:ids)')
->setParameter('ids', $randomQuestionIds)
->getQuery()
;
return $qb->getResult();
}
虽然这工作正常,但我一直在尝试让答案随机排序,但我不太确定该怎么做。
您可以简单地洗牌与答案相关的实体。例如:
$entries = $question->getOptions()->toArray();
shuffle($entries);
希望对您有所帮助