有一系列问题,我需要检查用户是否在每个问题中投票给任何答案

时间:2016-11-23 13:21:44

标签: php mysql mongodb symfony

我有一个用Symfony + Mongodb构建的项目作为后端一个Angular2作为前端。为了得到最好的答案,我会尽力解释我的问题。

我的实体是:

问题 回答 表决

每个问题可以有很多答案,每个答案都有很多票。用户可以在每个问题中投票(并且只有一个)。

好。我有一个控制器,返回主页的问题数组

   public function getQuestions(ParamFetcher $paramFetcher) {
        $em = $this->get('doctrine_mongodb')->getManager();
        $questionRepo = $em->getRepository('ThisOrThisBaseBundle:Question');
        $categoryRepo = $em->getRepository('ThisOrThisBaseBundle:QuestionCategory');
        $page = $paramFetcher->get('page',1);
        $categoryId = $paramFetcher->get('categoryId',false);
        $category = ($categoryId) ? $categoryRepo->findOneById($categoryId) : false;
        $dev = $questionRepo->findQuestionsPaginated($category,$page-1);
        $view = View::create()->setData($dev->toArray(false));
        return $this->get('fos_rest.view_handler')->handle($view);
    }

没什么特别的。我想要的是以下内容:对于每个问题,如果用户投票给其中一个答案,那么我可以在前端中显示一个标签,标记用户投票的答案。

我怀疑是做这件事的最佳选择。我的事情是:

  • 获取所有问题,在php中迭代问题数组,并对每个问题进行查询以获得投票(如果存在)
  • 因为问题数组是水合的,所以用PHP迭代寻找投票。
  • 也许其他选择并不是我想到的。

谢谢

1 个答案:

答案 0 :(得分:0)

首先,您应该使用Doctrine并使用必要的方法实现多对一。 如果由于某种原因你不能: 对使用给定用户的投票加入的答案表进行单个查询。询问[数组]中question_id所在的所有内容(数组是您已经获得的一系列问题ID)。收到行后,如果其ID存在于您从DB收到的行中,请检查每个问题。