sef*_*rov 3 symfony doctrine-orm
我有两个实体问题和标签.它们之间存在多对多关系,并且生成了"tag_question"表(带有question_id和tag_id列).
$questions = $tag->getQuestion();
Run Code Online (Sandbox Code Playgroud)
执行此操作时,它将返回所有结果,以及带标记的所有问题.该方法由Doctrine2在Tag实体中自动生成.如何限制结果(添加分页等)?
如果性能对你来说不是一个大问题,那么使用Doctrine获取对所有Question实体的引用应该不是太大的问题,让PHP进行过滤(而不是让MySQL这样做).请记住,默认情况下,Doctrine不会返回完整的实体; 相反,它返回一个代理对象(以后可以通过对数据库的另一个查询更加完全水合):
class Question
{
public function getQuestions($offset = 0; $length = null)
{
return array_slice( $this->questions, $offset, $length );
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果性能存在问题,您可能需要考虑使用执行自定义DQL查询或Doctrine的QueryBuilder类的方法创建自定义存储库类:
class TagRepository
{
public function findSomeByQuestion($question, $offset, $length)
{
$qb = $this->createQueryBuilder("tag")
->select("tag")
->join("tag.questions", "questions")
->where("question.id = :questionId")
->setParameter("questionId", $question->getId())
->setFirstResult($offset)
->setMaxResults($length);
return $qb->getQuery()->getResult();
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1828 次 |
最近记录: |