Symfony 2“findBy”将映射的实体参数转换为控制器

时间:2013-07-11 14:05:01

标签: php symfony doctrine-orm entity

我是Symfony2的新手,我想知道是否有一种方法可以将“findBy”用于仅存在于映射实体中的param。

这是我的代码段控制器:

$prods = $em->getRepository('EcommerceProductBundle:ProductData')
    ->findBy(array(
        'product_id'=>46
    ));

它运行良好但是如果我尝试向数组添加另一个元素(存在于映射实体中),它会(正确地)得到此错误

Unrecognized field: ProductImage.is_visible  

我想做的是,我只知道我可以将“filterBy”与实体ProductData的映射元素一起使用。

我错了,但这是我的想法:

->findBy(array(
  'product_id'=>46,
  'ProductImage.is_visible'=>1    
));

2 个答案:

答案 0 :(得分:0)

您不能这样做,您需要使用join子句在存储库中编写自定义方法。

findBy方法只是在条件上添加了where子句。

答案 1 :(得分:0)

据我所知,不可能。只需将此自定义方法添加到您的存储库:

public function findByIdAndVisibleImage($id)
{
    return $this->createQueryBuilder('product')
        ->lefJoin("product.image","i")
        ->where("product.product_id = :id")
        ->andWhere("i.is_visible = 1") 
        ->setParameter("id", $id)
        ->getQuery()
        ->getSingleResult();
 }