【问题标题】:Using Concat in TYPO3 Extbase Query在 TYPO3 Extbase 查询中使用 Concat
【发布时间】:2013-11-03 00:46:54
【问题描述】:

我正在努力应对一个小挑战,我想知道解决方案可能是什么,因为我在文档中找不到答案。

这是我当前的工作查询(部分):

$constraints[] = $query->like('kategorie', '%'.$kategorie.'%');

我想做的是这样的:

$constraints[] = $query->like(CONCAT(',', kategorie, ','), '%,'.$kategorie.',%');

这显然根本行不通。 :-)

每个帮助都非常有用。希望有人知道正确的语法。 TYPO3 版本是最新的 6.1

非常感谢!

【问题讨论】:

  • 我仍然尝试用typo3 4.5解决这个问题,但找不到任何解决方案。最后我使用自己的 statement 来构建一个 concat 查询。

标签: typo3 extbase


【解决方案1】:

首先,Extbase 查询生成在 6.0 中没有改变,所以对于 4.x 和 6.x 来说是一样的。

也许你误解了 Extbase 构建查询的方式。

$query->like('property', '%value%');

当 %value% 包含在“property”中时将返回一个对象。这样的属性必须在领域模型中定义。您只能查询在其域模型中具有“getProperty”方法的属性。

查看您的代码,我认为您正在寻找一种方法来查询逗号分隔值列表中存在的值?然后你会使用

$query->in('kategorien', $kategorie);

编辑:

您的具体问题似乎是您没有使用真正的关系将“类别”分配给您的实体。您正在使用逗号分隔的列表来保存对另一个模型的引用。不鼓励您这样做,但它在技术上是可行的,并且在 TYPO3 核心中使用:FrontendUser 模型具有以相同方式工作的属性“用户组”。

请查看 FrontendUser 模型:https://git.typo3.org/Packages/TYPO3.CMS.git/blob/HEAD:/typo3/sysext/extbase/Classes/Domain/Model/FrontendUser.php

您的类别注释必须正确,例如:

/**
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\My\Extension\Domain\Model\Kategorien>
*/
protected $kategorien;

还要确保 getKategorien 是正确的。

如果您仍有问题,请记住 TCA 定义必须正常工作才能使 Extbase 正常工作。

在我看来,最佳实践是使用 TYPO3 6.0 中引入的类别 API: http://wiki.typo3.org/TYPO3_6.0#Category

【讨论】:

  • 没错,但是带有 extbase 查询的 concat-command 怎么样?
  • 你的意思是你想查询一个连接的字段,例如first_name,last_name like %peter%?
  • 嗨洛伦兹,谢谢。我已经尝试使用“in” - 但随后我收到一条错误消息:#1264678095:“in”运算符必须被赋予一个多值操作数(数组、ArrayAccess、Traversable)。 (更多信息) - 可能是一个愚蠢的问题,但我是 extbase 的新手,无法弄清楚。我不明白为什么我的 VAR 必须是多值的?
  • 你的“类别”是什么样的对象。它只是一个逗号分隔的列表吗?那么你不能使用“in”。 Extbase 中的多值属性不应使用逗号分隔的列表,而应使用真正的关系。
  • 在数据库中 kategorien (categories) 是一个逗号分隔的列表,它与另一个包含所有类别的表相关。我仍然试图从数据库的角度解决这个问题,但这可能是错误的......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多