我怎样才能从另一个有条件的实体获得结果?
How can i get results from another Entity with conditions?
我有两个实体。第一个是类别,第二个是产品。它们之间是 ManytoOne 和 OneToMany 关系。
$query = $repository->createQueryBuilder('category')->join('category.product', 'p');
if ($request->request->get("beginDate") != "") {
$query->andWhere('p.date >= :beginDate')
->setParameter('beginDate', $request->request->get("beginDate"));
}
if ($request->request->get("endDate") != "") {
$query->andWhere("p.date <= :endDate")
->setParameter('endDate', $request->request->get("endDate"));
}
$categories = $query->getQuery()->getResult();
foreach($categories as $category){
echo "Category: ".$category->getCategoryName()."<br />";
foreach($category->getProduct() as $product){
echo "Product: ".$product->getProductName()."<br />";
}
}
我的问题是,当我获得产品时,它会将所有产品打印到该类别。我认为使用 OneToMany 关系是正常的。但我想从条件正确的类别中获取这些产品。
也许我应该再做一个查询生成器?但是我应该复制条件。还有其他解决方案吗?
哦,已经解决了:
$query = $this->getDoctrine()->getEntityManager()->createQueryBuilder()
->select('category, product')
->from('ShopBundle:Categories', 'category')
->join('category.product', 'product');
我有两个实体。第一个是类别,第二个是产品。它们之间是 ManytoOne 和 OneToMany 关系。
$query = $repository->createQueryBuilder('category')->join('category.product', 'p');
if ($request->request->get("beginDate") != "") {
$query->andWhere('p.date >= :beginDate')
->setParameter('beginDate', $request->request->get("beginDate"));
}
if ($request->request->get("endDate") != "") {
$query->andWhere("p.date <= :endDate")
->setParameter('endDate', $request->request->get("endDate"));
}
$categories = $query->getQuery()->getResult();
foreach($categories as $category){
echo "Category: ".$category->getCategoryName()."<br />";
foreach($category->getProduct() as $product){
echo "Product: ".$product->getProductName()."<br />";
}
}
我的问题是,当我获得产品时,它会将所有产品打印到该类别。我认为使用 OneToMany 关系是正常的。但我想从条件正确的类别中获取这些产品。 也许我应该再做一个查询生成器?但是我应该复制条件。还有其他解决方案吗?
哦,已经解决了:
$query = $this->getDoctrine()->getEntityManager()->createQueryBuilder()
->select('category, product')
->from('ShopBundle:Categories', 'category')
->join('category.product', 'product');