【问题标题】:TYPO3 Extbase: Query Builder using setEnableFieldsToBeIgnoredTYPO3 Extbase:使用 setEnableFieldsToBeIgnored 的查询生成器
【发布时间】:2017-08-25 13:00:46
【问题描述】:

TL;DR:如何使用 getQuerySettings()->setEnableFieldsToBeIgnored() 来处理关系而不是“基础”表?使用 array('fe_users.disable') 不起作用。

我有一个名为“parks”的数据库模型,它具有三个字段:“领导者”、“管理员”和“合作伙伴”。都是 fe_user 表上的可选连接。

现在我想创建一个存储库方法来获取一个公园,其中给定的 fe_user 是领导者、管理员或合作伙伴。这就像:

$query = $this->createQuery();
$where[] = $query->equals('parkusersLeader.uid', $userUid);
$where[] = $query->equals('parkusersAdministrators.uid', $userUid);
$where[] = $query->equals('parkusersPartner.uid', $userUid);
$query->matching($query->logicalOr($where));

这实际上创建了一个 SQL 查询,其中将每个 MM 表连接到“fe_users”表,但是为每个 fe_users 表连接启用了 WHERE 语句,添加了一个“fe_users.disable=0 “对它。因此,一旦任何公园分配了多个用户并且其中分配的用户之一被禁用,整个查询将失败并且不会返回公园。

那么如何使用 setEnableFieldsToBeIgnored() 方法不让 extbase 在这个地方为 fe_user 加入附加“禁用”子句?我试过了:

$query->getQuerySettings()->setEnableFieldsToBeIgnored(array('parkusersLeader.disable', 'parkusersLeader.disabled', 'fe_users.disabled', 'fe_users.disable', 'disabled', 'starttime'));

这些似乎都没有改变 SQL 查询。

【问题讨论】:

    标签: typo3 extbase


    【解决方案1】:

    您需要启用该选项以显式忽略禁用字段。

    您是否尝试为您的查询设置以下内容

    $query->getQuerySettings()->setIgnoreEnableFields(true);
    $query->getQuerySettings()->setEnableFieldsToBeIgnored(['disable']);
    

    (这应该忽略所有记录中的 disabled 属性。根据您的示例,字段定义可能更具体。您也可以为存储库全局设置这些属性。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多