TYPO3存储库查询中的包含条件

问题描述 投票:0回答:3

我的存储库中有此查询:

public function fetchAccountRecord(int $guideOption, string $fact, int $adapter = NULL) {

    $query = $this->createQuery();
    $query->getQuerySettings()->setIgnoreEnableFields(TRUE);
    $query->getQuerySettings()->setEnableFieldsToBeIgnored(['starttime','endtime']);
    $query->matching(
        $query->logicalAnd(
            [
                $query->equals('guide_option', $guideOption),
                $query->equals('fact', $fact)
            ]
        )
    );

    return $query;
}

如果存在$adapter,我如何为它添加一个附加约束?所以我尝试添加

$adapter ? $query->equals('adapter', $adapter) : NULL

但不起作用。

typo3
3个回答
1
投票

您可以利用QueryInterface::logicalAnd()也接受一系列约束的事实。然后,您有条件地扩展该数组:

$query = $this->createQuery();
$query->getQuerySettings()->setIgnoreEnableFields(TRUE);
$query->getQuerySettings()->setEnableFieldsToBeIgnored(['starttime','endtime']);

$constraints = [
    $query->equals('guide_option', $guideOption),
    $query->equals('fact', $fact),
];

if ($adapter) {
    $constraints[] = $query->equals('adapter', $adapter);
}

$query->matching($query->logicalAnd($constraints));

1
投票

您可以执行以下操作:

$constrains= [];
$constrains[] =  $query->equals('guide_option', $guideOption);
$constrains[] =  $query->equals('fact', $fact);

if($adapter) {
   $constrains[] =  $query->equals('adapter', $adapter);
}

$query->matching($query->logicalAnd($constrains);

1
投票

尝试做类似的事情:

public function fetchAccountRecord(int $guideOption, string $fact, int $adapter = NULL) {

$query = $this->createQuery();
$query->getQuerySettings()->setIgnoreEnableFields(TRUE);
$query->getQuerySettings()->setEnableFieldsToBeIgnored(['starttime','endtime']);

$constraints[]

if($adapter) {
   $constraints[] = $query->equals('adapter', $adapter);
}

 $constraints[] =  $query->logicalAnd(
        $query->equals('guide_option', $guideOption),
        $query->equals('fact', $fact),
   );

$query->matching($query->logicalAnd($constraints));

return $query;

}

© www.soinside.com 2019 - 2024. All rights reserved.