2016-02-25 2 views
2

Продукт и изображение - это два объекта, связанных одной ассоциацией oneToMany (один продукт имеет много изображений). Я стараюсь, чтобы перечислить с прутик каждый продукт с первым изображением (имя файла ФИРО), как это:Symfony, OneTwoMany, первый дочерний элемент в twig

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

Смежные вопросы