original_string: public function findAttributeValues($product)
      {
          // select
          $qb = $this->getQueryBuilder()
              ->select('a.name attributeName, av.name, i.path imagePath');
  
          // join
          $qb->join('p.attributeValues', 'av')
              ->join('av.attribute', 'a')
              ->leftJoin('av.image', 'i');
  
          // where
          $qb->andWhere('p = :product')
              ->setParameter('product', $product);
  
          // order by
          $qb->orderBy('a.order', 'asc');
  
          return $qb->getQuery()
              ->getResult();
      }
code: public function findAttributeValues($product)
      {
          // select
          $qb = $this->getQueryBuilder()
              ->select('a.name attributeName, av.name, i.path imagePath');
  
          // join
          $qb->join('p.attributeValues', 'av')
              ->join('av.attribute', 'a')
              ->leftJoin('av.image', 'i');
  
          // where
          $qb->andWhere('p = :product')
              ->setParameter('product', $product);
  
          // order by
          $qb->orderBy('a.order', 'asc');
  
          return $qb->getQuery()
              ->getResult();
      }
code_tokens: public function findAttributeValues ( $ product ) { // select $ qb = $ this -> getQueryBuilder ( ) -> select ( 'a.name attributeName, av.name, i.path imagePath' ) ; // join $ qb -> join ( 'p.attributeValues' , 'av' ) -> join ( 'av.attribute' , 'a' ) -> leftJoin ( 'av.image' , 'i' ) ; // where $ qb -> andWhere ( 'p = :product' ) -> setParameter ( 'product' , $ product ) ; // order by $ qb -> orderBy ( 'a.order' , 'asc' ) ; return $ qb -> getQuery ( ) -> getResult ( ) ; }
docstring: Find sorted attribute values
  
  @param Product $product
  
  @return ArrayCollection
docstring_tokens: Find sorted attribute values