gpt4 book ai didi

mysql - 教义或地方给出奇怪的结果

转载 作者:行者123 更新时间:2023-11-29 15:55:17 24 4
gpt4 key购买 nike

我有一个 FaqEntry 类。该对象有一个属性categories,它是一个数组。其可能的值为“CAT1”、“CAT2”、“CAT3”、“CAT4”。我有一个 FaqEntryRepository 类,其方法返回大多数一般用例的查询构建器。我可以给它一个类别数组,FaqEntries 将根据给定的类别进行过滤。

以下是我想用来过滤掉所有类别的代码。没有其他 where()andWhere()orWhere() 子句,只有 orderBy()和一个setMaxResults()

if ($categories) {
foreach ($categories as $category) {
if (CategoryEnum::isValid($category)) {
$queryBuilder
->orWhere('fe.categories LIKE :category')
->setParameter('category', '%' . $category . '%')
;
}
}
}

但是,当我得到结果时,它只得到那些设置了“CAT4”的结果。例如:

  • 选择所有类别后,仅返回包含“CAT4”的条目。
  • 仅过滤“CAT1”时,它仅返回设置了“CAT1”和“CAT4”的条目。

这是解决这个问题的一种方法,但我不太喜欢它,因为现在我自己伪造 SQL:

if ($categories) {
$whereString = '';
foreach ($categories as $category) {
if (CategoryEnum::isValid($category)) {
$whereString .= 'or fe.categories LIKE \'%' . $category . '%\''; }
}
$whereString = substr($whereString, 3);
$queryBuilder->andWhere($whereString);
}

有人看出我做错了什么吗?

最佳答案

我仍然不确定为什么会发生这种情况,但这里有一个使用 Doctrine 查询构建器的更好的解决方案。 I found the solution here: https://stackoverflow.com/a/48906639/2619074

$orStatements = $queryBuilder->expr()->orX();
foreach ($categories as $category) {
$orStatements->add(
$queryBuilder->expr()->like(
'fe.categories',
$queryBuilder->expr()->literal('%' . $category . '%')
)
);
}
$queryBuilder->andWhere($orStatements);

关于mysql - 教义或地方给出奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56514686/

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