gpt4 book ai didi

php - Doctrine2 首先查询具有特定值的 orderBy

转载 作者:可可西里 更新时间:2023-11-01 08:09:52 24 4
gpt4 key购买 nike

我正在尝试使用 Doctrine 将多个过滤器应用于 Symfony 中的一个 dql。我想按几列排序(尽管目前我只有一列有问题)并且我想显示与特定值匹配的第一个值。我将写一个简单的例子来说明我正在搜索的结果:

col1                   col1
---- -----
A B
B => A
C C
W W

我正在搜索有关如何制作它的信息,但我有点困惑,因为有些人说我不能直接做,其他人说可以使用 case whenif/else。我尝试使用 case when 但没有成功。我使用的代码如下:

更新的代码和错误

$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();

如果我想将“B”值设置为参数,我应该在 addSelect 之后使用 setParameter 吗?

现在使用上面的代码我得到以下错误:

Key "title" for array with keys "0, to" does not exist in result.html.twig at line 177. 

有关我如何将此方法调用到我的 Controller 并将其传递给 twig 模板的信息:

        $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'));

还有我出错的 Twig 模板:

<td><p>{{articles.title}}></p></td>

{{ dump(articles) }} 的结果

Paginator {#475 ▼
-query: Query {#484 ▼
-_state: 2
-_dql: "SELECT article, (CASE WHEN article.to = 'WOR' THEN 1 ELSE 0 END) AS to FROM AppBundle\Entity\Article article WHERE article.title LIKE :title ORDER BY article.to ASC"
-_parserResult: null
-_firstResult: 0
-_maxResults: 50
-_queryCache: null
-_expireQueryCache: false
-_queryCacheTTL: null
-_useQueryCache: true
#parameters: ArrayCollection {#483 ▼
-elements: array:1 [▼
0 => Parameter {#480 ▼
-name: "title"
-value: "%t%"
-type: 2
}
]
}
#_resultSetMapping: null
#_em: EntityManager {#105 …10}
#_hints: []
#_hydrationMode: 1
#_queryCacheProfile: null
#_expireResultCache: false
#_hydrationCacheProfile: null
}
-fetchJoinCollection: true
-useOutputWalkers: null
-count: 143
}

我在没有 when 的情况下执行了相同的 dql 查询(使用那个 dql 我没有任何问题),并且我比较了 Twig 中的转储,我看到的唯一区别是在另一个 dql 中我得到了#483和 #482 索引分别代替 #484 和 #480

而且我不能 var_dump 数组的任何位置,但是数组有正确数量的结果,虽然我不能检查结果是否以正确的方式排序我被这个问题困住了,如果有人能引导我找到正确的答案,我将不胜感激!

最佳答案

我不确定您的查询是否有效,但是如果您像这样更改此行会怎样:

->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();

然后将文章传递给你的 twig 并渲染它。通常这样做:

return $this->render('result.html.twig', array(
'articles' => $articles,
));

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

关于php - Doctrine2 首先查询具有特定值的 orderBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41434810/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com