我正在尝试使用Doctrine将几个过滤器应用于Symfony中的一个dql。我希望通过几列来命令它(虽然目前我只有一列有问题)并且我希望显示与特定值匹配的第一个值。我将写一个简单的例子来说明我正在搜索的结果:
col1 col1
---- -----
A B
B => A
C C
W W
我正在搜索有关如何制作它的信息,但我有点困惑,因为有些人说我不能直接做,其他人说可以使用case when
或{{1 }}。我尝试使用案例但没有成功。我使用的代码如下:
更新了代码和错误
if/else
如果我想将“B”值设置为参数,我应该在addSelect之后使用setParame吗?
现在使用上面的代码我收到以下错误:
$query = $this->createQueryBuilder('article')
->where('article.title LIKE :article')
->setParameter('title', '%'.$term.'%')
->addSelect('(CASE WHEN article.to = \'WOR\' THEN 1 ELSE 0 END) AS to')
->addOrderBy('article.to', 'ASC')
->getQuery();
有关如何将此方法调用到我的控制器并将其传递给twig模板的相关信息:
Key "title" for array with keys "0, to" does not exist in result.html.twig at line 177.
我有错误的树枝模板:
$prodMan = $this->get('app.article.manager');
$articles = $prodMan->getResults((string)"t", $page);
$limit = 50;
$maxPages = ceil($articles->count() / $limit);
$thisPage = $page;
return $this->render('result.html.twig', compact('categories', 'maxPages', 'thisPage', 'articles', 'images'));
<td><p>{{articles.title}}></p></td>
{{ dump(articles) }}
我执行了相同的dql查询而没有这种情况(使用那个dql我没有任何问题),我比较了Twig中的转储和我看到的唯一区别是在我得到的其他dql#483和#482索引而不是#484和#480尊重
我不能var_dump数组的任何位置,但数组有正确的结果数,但我无法检查结果是否以正确的方式排序 我坚持这个问题,如果有人能引导我找到正确的答案,我将非常感激!
答案 0 :(得分:2)
我不确定您的查询是否有效,但如果您更改此行,该怎么办:
->addSelect('(CASE WHEN article.to = \'B\' THEN 1 ELSE 0 END) AS HIDDEN to')
转义报价,或:
->addSelect("(CASE WHEN article.to = 'B' THEN 1 ELSE 0 END) AS HIDDEN to")
这样B
就引用了。再次,不确定查询本身。
编辑#2 - 基于文章转储
看起来转储仍然是一个查询。 你需要得到如下结果:
$articles = $query->getResult();
然后将文章传递给你枝条并渲染它。 通常这样做:
return $this->render('result.html.twig', array(
'articles' => $articles,
));
看看是否有效。 您可能需要更改,但上面的代码可以让您了解要做什么。