我有一个实体“讨论”(除其他外):
- 一个类别属性(每个讨论都有一个与之关联的类别)
- “推荐类别”的多对多关联(每个讨论都可以在多个类别中推荐)
我正在尝试选择特定类别中的所有讨论(它们的类别属性是该类别)或在此特定类别中推荐的讨论。
我可以很容易地得到这个类别中的所有讨论,如下所示:
$qb = self::$em->getRepository('Discussion')->createQueryBuilder('d');
$discussions = $qb->where('d.category='.$current_category_id)
->setFirstResult( $offset )
->setMaxResults( $limit )
->getQuery()->getResult();
我需要添加所有在其推荐类别列表中具有 current_category_id 的讨论。
所以添加这样的东西:
$qb = self::$em->getRepository('Discussion')->createQueryBuilder('d');
$discussions = $qb->where('d.category='.$current_category_id)
->orWhere($qb->expr()->in($current_category_id, 'd.recommended_categories'))
->setFirstResult( $offset )
->setMaxResults( $limit )
->getQuery()->getResult();
这给出了一个 SQL 错误,因为它不喜欢 SQL 中的“4 IN(d.recommended_categories))”。
这是 Discussions 实体中的 Recommended_categories 的样子:
/**
* @ManyToMany(targetEntity="Category")
* @JoinTable(name="discussion_recommended_categories",
* joinColumns={@JoinColumn(name="discussion_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="category_id", referencedColumnName="id")}
* )
*/
private $recommended_categories;
这是类别实体:
/** @Id @Column(type="integer") @GeneratedValue **/
protected $id;
/** @Column(type="string", unique=true, nullable=false,name="Name") **/
protected $name;
我也尝试过使用存在($current_category_id 是否存在于 d.recommended_categories 中),但没有任何效果。
有什么想法可以检查给定值(不是列)是否存在于与该实体关联的值列表中?
谢谢!