2 回答

TA貢獻(xiàn)1801條經(jīng)驗 獲得超8個贊
如果你想讓所有文章都至少有一個指定的標(biāo)簽,你的代碼應(yīng)該是這樣的:
public function search($titles, $tags, $authors)
{
return $query = $this->createQueryBuilder('a') // a = article
->innerJoin('a.tags', 't') //on inner join is enough
->where('t.name in (:set)')
->setParameter('set', $tags)
->orderBy('a.createdAt', 'DESC')
->setMaxResults($limit)
->setFirstResult($offset)
->getQuery() //retrieve
->getResult();
}
第一個 SQL 將進行連接。提示是使用“in”運算符。
如果您想要包含所有標(biāo)簽(完全是所有)的文章,您應(yīng)該為每個標(biāo)簽添加一個內(nèi)部連接。技巧是為每個連接添加一個別名,并在別名上添加一個唯一的東西。
public function search($titles, $tags, $authors)
{
$query = $this->createQueryBuilder('a') // a = article;
foreach ($tags as $index => $tag) {
$query->innerJoin('a.tags', "t$index")
->andWhere("t$index" + ".name in (:tag$index)")
->setParameter("tag$index", $tag)
}
return $query
->orderBy('a.createdAt', 'DESC')
->setMaxResults($limit)
->setFirstResult($offset)
->getQuery() //retrieve
->getResult();
你的要求應(yīng)該是這樣的。我沒有測試它們,但這是模板。

TA貢獻(xiàn)1812條經(jīng)驗 獲得超5個贊
如果有人有同樣的問題,這里的代碼:
foreach ($tags as $id => $tag) {
$query->innerJoin('a.tags', "t${id}")
->andWhere("t${id}.name in (:tag${id})")
->setParameter(":tag${id}", $tag);
}
- 2 回答
- 0 關(guān)注
- 141 瀏覽
添加回答
舉報