为什么我必须在学说关系中使用对象?
例如,我有两个实体-类别和发布。从jquery我收到控制器中的许多ID:
$categories = array(3, 5, 2);
如果我要获取对象,则必须首先获取对象:
$cat = array();
foreach ($categories as $category) {
$cat[] = $this->getDoctrine()
->getRepository('AppBundle:Category')
->find($category);
}
而且只有现在我才能找到我的帖子:
$repository = $this->getDoctrine()
->getRepository('AppBundle:Post');
$query = $repository->createQueryBuilder('p');
$query->andWhere('p.category IN (:cat)')
->setParameter('cat', $cat);
$posts = $query->getQuery()->getResult();
为什么我不能在第二个查询中仅使用id类别?为什么必须将对象传递给具有关系的查询?为什么查询生成器看不到category_id而不是category?
它向数据库收费并增加页面加载时间。
您可以通过以下findBy()
方法按类别ID直接找到您的帖子:
$repository = $this->getDoctrine()->getRepository('AppBundle:Post');
$posts = $repository->findBy(['category' => $categories]);
或通过QueryBuilder
:
$repository = $this->getDoctrine()->getRepository('AppBundle:Post');
$query = $repository->createQueryBuilder('p')
->where('p.category IN (:categories)')
->setParameter('categories', $categories);
$posts = $query->getQuery()->getResult();
$categories
您的类别ID的数组在哪里。
另外,在查询中的第一种情况下,您应该使用where()
而不是andWhere()
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句