如何使用symfony2 doctrine DQL从多个到多个关系的第三个表中获取数据

时间:2017-03-11 06:00:09

标签: symfony dql

1)类别实体:

        /** 
    * Category 
    * 
    * @ORM\Table(name="category") 
    * @ORM\Entity(repositoryClass="AppBundle\Repository\CategoryRepository")
    */
    class Category {
    /**     
    * @var int   
    * @ORM\Column(name="id", type="integer")   
    * @ORM\Id    
    * @ORM\GeneratedValue(strategy="AUTO")    
    */   
     protected $id; 

      /** 
       *  @var string  
       *  @ORM\Column(name="categoryname", type="string")     
       */    
     protected $categoryname; 

     /** 
       * @ORM\ManyToMany(targetEntity="Tag", inversedBy="categories")    
       */   
     protected $tags;
       /**
        *  @return ArrayCollection     
        */ 
     public function __construct(){     
         $this->tags = new ArrayCollection();  
         }

2)标签实体:

    /** 
* Tag 
* @ORM\Table(name="tag") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\TagRepository") 
*/ 
class Tag {
   /**    
   * @var int   
   * @ORM\Column(name="id", type="integer")   
  * @ORM\Id    
  * @ORM\GeneratedValue(strategy="AUTO")    
  *   
  */
protected $id;

/**   
 * 
 * @var string
 * 
 *@ORM\Column(name="tagname", type="string")     
 */  
protected $tagname;   

/** 
  *  @ORM\ManyToMany(targetEntity="Category", mappedBy="tags")     
  */    
protected $categories;
 /**   
  *  @return ArrayCollection     
  */
public function __construct(){     
    $this->categories = new ArrayCollection();   
    }

我正在使用下面的dql查询:获取第三个表数据表单数据库,但我坚持得到第三个表数据:

    $categoryId = $request->request->get('cat_id');  
        $repository = $em->getRepository('AppBundle:Tag');
        $tags = $repository->createQueryBuilder('t')
                    ->innerJoin('t.categories', 'c')
                    ->where('c.id = :category_id')
                    ->setParameter('category_id', $categoryId)
                    ->getQuery()->getResult();

如何使用DQl查询从数据库中获取第三个表(category_tag)数据:

感谢您提前......

1 个答案:

答案 0 :(得分:2)

我认为你应该在Category实体中添加* @JoinTable注释$ tags属性,如下所示:

 /** 
   * @ORM\ManyToMany(targetEntity="Tag", inversedBy="categories")
   * @ORM\JoinTable(name="category_tag")
   */   
 protected $tags;

在此处查看Doctrine Many-toMany的文档:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#many-to-many-bidirectional

如果您希望查询得到的结果是一个数组,其中包含具有多对多关系的id对,那么您的查询应如下所示:

$tags = $repository->createQueryBuilder('t')
            ->select('c.id as categoryId, t.id as tagId')
            ->innerJoin('t.categories', 'c')
            ->where('c.id = :category_id')
            ->setParameter('category_id', $categoryId)
            ->getQuery()
            ->getResult();

希望这有帮助! :)