2016-02-25 25 views
2

产品和图像是通过oneToMany关联关联的两个实体(一个产品具有多个图像)。我尝试用嫩枝每个产品枚举与第一图像(文件名田间)是这样的:Symfony,OneTwoMany,树枝中的第一个子元素

class ProductRepository extends EntityRepository 
{ 
    public function getProductsWithImages() { 

     $query = $this->createQueryBuilder('e') 
         ->leftJoin('e.images', 'i', 'with', 'i.order = :order') 
         ->setParameter('order' , 0) 
         ->select('e') 
         ->addSelect('i'); 

     return $query->getQuery()->getResult(); 
    } 

}

但我得到这个错误:

Method "filename" for object "\entity\product" does not exist. 

我明白为什么(产品实体没有图像字段)。没有添加父对象的引用(像mainImage字段),只得到一个子元素的最佳实践是什么?

+0

告诉我们您的树枝代码 - 为问题可能有 –

回答

1

由于doctrine documentation解释说:

一到一对多的关联必须是双向的,除非你使用一个额外的连接表是 。这是必要的,因为 一对多关联中的外键在“许多” 一侧上定义。 Doctrine需要一个多对一的关联,它定义了这个外键的映射的 。

我在当前项目中有这种关系,我只是定义了双向一对多关联。因此,在您树枝视图,你应该能够例如做:

{# first Image linked to the Product #} 
{{ product.images.first }} 

属性images是一个ArrayCollection。

希望它可以帮助

+0

有了这个方法,你lazyload每种产品的所有图像。 – Jerome