【问题标题】:Extbase remove duplicate objects in controller / repositoryExtbase 删除控制器/存储库中的重复对象
【发布时间】:2018-05-08 19:13:09
【问题描述】:

我们从另一家公司接手了一个项目,需要更新他们的 TYPO3。我们现在是最近的 8.7.13。

有一个产品扩展将产品、组和项目过滤到一个视图中。由于未知原因,以下输出了2个产品,它们都是相同的:

public function findByObjekt($uid) {
    $query = $this->createQuery();

    $query->matching(
             $query->contains('objekte', $uid),
             $query->equals('objekte.hidden',0),
             $query->equals('objekte.deleted',0)
    );

    $query->getQuerySettings()->setRespectStoragePage(FALSE);
    $query->getQuerySettings()->setRespectSysLanguage(FALSE);
    return $query->execute();
}

有没有办法在将重复的条目/对象返回到控制器进行输出之前删除它们?我检查了多个文档,但找不到获得唯一结果的方法(即可能不需要通常...)。另一个想法是处理流体模板中的重复逻辑,但我猜这是一个相当糟糕的解决方案。

【问题讨论】:

  • 数据库表中是否存在具有相同UID的产品?我认为$query->equals('objekte', $uid),更具体。
  • @HeinzSchilling 不,UID 始终是唯一的。由于这种关系,equals 不能工作。
  • 是多语言网站吗?
  • @Martin 是的。默认是英语,其次是德语。该系统旨在获取默认语言数据集并将翻译用于输出。

标签: typo3 fluid extbase


【解决方案1】:

我假设您有所需的默认语言和一种本地化记录。 使用 extbase,原始语言记录及其所有本地化具有相同的标识符 (uid),尽管它们在数据库中有所不同。 Extbase 通常只查找当前语言的记录。

正如你setRespectSysLanguage(FALSE),extbase 不会按语言过滤。这就是您收到两条记录的原因。

为什么你仍然将respectSysLanguage 设置为false?

【讨论】:

  • 当我将 respectSysLanguage 设置为 true 时,与默认语言相比,翻译后的输出中缺少一些条目。我不知道为什么,它们被翻译了。
  • 你还有没有重复的尊重SysLanguage==true?
  • 不,我没有使用此设置的重复项,但缺少对象。一位同事现在终于修好了。感谢您的帮助。
  • @Andreas ,我们很好奇:请与我们分享您的同事是如何修复它的。
猜你喜欢
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多