[英]How to find a given value in a many-to-many relationship using Doctrine?
我有一個實體“討論”,該討論有(除其他事項外):
我試圖選擇屬於特定類別(其類別屬性是該類別)或此特定類別中推薦的所有討論。
我可以輕松獲得該類別中的所有討論,例如:
$qb = self::$em->getRepository('Discussion')->createQueryBuilder('d');
$discussions = $qb->where('d.category='.$current_category_id)
->setFirstResult( $offset )
->setMaxResults( $limit )
->getQuery()->getResult();
我需要補充的是,所有在“ recommended_categories”列表中包含“ 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中的“ 4 IN(d.recommended_categories))”,因此產生了SQL錯誤。
這是在“討論”實體中的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;
我也嘗試過使用exist(d.recommended_categories中是否存在$ current_category_id),但沒有任何效果。
有什么想法可以檢查給定值(而不是列)是否存在於與該實體相關聯的值列表中?
謝謝!
首先,您應該在where子句中為參數使用准備好的語句 ,以便防止sql注入。 另外,您需要傳遞當前的類別實體,Doctrine會通過查看您的映射神奇地從中提取ID。 假設您有$currentCategory
可用。
$discussions = $qb
->where('d.category = :category')
->setParameter('category', $currentCategory);
您正在嘗試使用IN
來檢查集合中的給定值,但這不是IN
的意思。 您應該將其用於以下one of
情況(作為多個條件的替代)。 即myfield = 1或myfield = 2或myfield = 3可以寫成myfield IN(1、2、3)。 我認為您語法錯誤,因為參數順序錯誤。
無論如何,要擺脫IN
,只需在orWhere
和類別中的orWhere
添加orWhere
。 總之,您應該最終得到這樣的結果..未經測試。
$discussions = $qb
->where('d.category = :category')
->leftJoin('d.recommended_categories', 'rc')
->orWhere('rc = :category')
->setParameter('category', $currentCategory);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.