Doctrine2查询订单首先使用特定值

时间:2017-01-03 00:10:10

标签: php mysql symfony doctrine-orm sql-order-by

我正在尝试使用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数组的任何位置,但数组有正确的结果数,但我无法检查结果是否以正确的方式排序 我坚持这个问题,如果有人能引导我找到正确的答案,我将非常感激!

1 个答案:

答案 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,
));

看看是否有效。 您可能需要更改,但上面的代码可以让您了解要做什么。