我想通过一个字段的结果从另一个字段中选择连接的表。
详细地有一个字段 catId。这是前面带有字母 s 或 c 的类别的 id。如果有像 c6 这样的 c,我必须加入类别表并在那里查找 id。如果是 s,我必须加入子类别表并查找 id。所以我也必须在结果前面剪掉字母。
如何在查询生成器中直接在代码中执行此操作?我希望这能解释它:
public function contentByNId($NId)
{
return $this->createQueryBuilder('c')
->where('c.news = :news')
->setParameter('news', $NId)
// the result from c.catId as a number with s for subcategory or c for category in front. like s21 or c6
// if in c.catID is an s than
// cut the letter (s or c) from c.catId for the leftJoin to replacedCatID
->leftJoin('AppBundle:subcategories', 's', 'WITH', 'c.replacedCatID = s.id')
//
//
// else
//
//
->leftJoin('AppBundle:categories', 's', 'WITH', 'c.replacedCatID = s.id')
//
//
->addSelect(
'c',
's.headline'
)
->getQuery()
->getArrayResult();
}
public function contentByNId($NId)
{
$qb = $this->createQueryBuilder('c');
.....................
if(//your logic) {
.....................
$qb->leftJoin('AppBundle:subcategories', 's', 'WITH', 'c.replacedCatID = s.id')
.................................
}
else {
.....................
$qb->leftJoin('AppBundle:categories', 's', 'WITH', 'c.replacedCatID = s.id')
.................................
}
return $qb->getQuery();
}