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)数据:
感谢您提前......
答案 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();
希望这有帮助! :)