TYPO3 Extbase:使用setEnableFieldsToBeIgnored的查询生成器

时间:2017-08-25 13:00:47

标签: typo3 extbase

TL; DR:我如何使用getQuerySettings() - > setEnableFieldsToBeIgnored()来处理关系而不是" base"表?使用数组(' fe_users.disable')不起作用。

我有一个名为" park"它有三个字段:"领导","管理员"和#34;伙伴"。所有这些都是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表创建了JOIN到" fe_users" table,但是为每个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查询。

1 个答案:

答案 0 :(得分:0)

您需要启用该选项以明确忽略禁用字段。

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

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

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

相关问题