2017-08-25 47 views
0

TL; DR:如何使用getQuerySettings() - > setEnableFieldsToBeIgnored()来处理关系而不是“基本”表?使用数组('fe_users.disable')不起作用。TYPO3 Extbase:使用setEnableFieldsToBeIored的查询生成器

我有一个名为“园区”的数据库模型,它有三个字段:“领导者”,“管理员”和“伙伴”。所有这些都是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查询,其中一个JOIN每个MM-表的“fe_users”表的是做,但WHERE语句为每个fe_users表连接的启用,添加一个“fe_users.disable = 0”。因此,只要有任何公园分配了多个用户并且其中一个分配的用户被禁用,整个查询就会失败并且不会返回公园。

那么,如何使用setEnableFieldsToBeIored()方法不使extbase追加在这个地方fe_user加入“禁用”条款?我试过了:

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

这些都没有改变SQL查询。

回答

0

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

你有没有尝试设置下面为您查询

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

(这应该忽略所有记录禁用属性,它也可能可以在字段定义更加具体 - 。按你的例子​​你也可以在全球范围内设置存储库。)