TYPO3 extbase数据库查询
TYPO3 extbase database query
我有一个如下所示的 extbase 数据库查询。
$query = $this->createQuery();
$result = $query->statement("Select * FROM table1 WHERE hidden = 0 AND deleted = 0 AND (".$PublicationYears.") AND logo != '' ORDER BY uid ASC LIMIT 0, ".$iLimit." ")->execute();
return $result;
$PublicationYears = "ttra = '12' or ttra = '13' or ttra = '14'";
我按如下方式转换了这个查询,
$query = $this->createQuery();
$query->getQuerySettings()->setRespectStoragePage(FALSE);
$query->matching( $query->logicalAnd(
$query->equals('deleted', 0),
$query->equals('hidden', 0)
));
$query->matching($query->logicalAnd($PublicationYears));
$query->matching($query->logicalNot(
$query->equals('logo', '')
));
$query->setOrderings(array('uid' => Tx_Extbase_Persistence_QueryInterface::ORDER_ASCENDING));
$query->setLimit((integer)$iLimit);
$Result = $query->execute();
return $Result;
但是结果查询不包含与
相关的查询部分
$query->matching($query->logicalAnd($PublicationYears));
我认为上面的查询还有其他错误。
请帮助我创建正确的查询。
提前致谢。
首先你不需要这个
$query->matching( $query->logicalAnd(
$query->equals('deleted', 0),
$query->equals('hidden', 0)
));
disable fields
根据ext_tables.php
中table的设置默认包含在查询中
多重匹配无效
导致你的第三次匹配
$query->matching($query->logicalNot(
$query->equals('logo', '')
));
正在覆盖之前使用的 matching()
logicalAnd
在字符串上?也不行
在你的情况下,你只需要将所有内容都放在 logicalAnd
中,这样做
$constraints = array();
$subConstraints = array();
$subConstraints[] = $query->equals('ttra', 12);
$subConstraints[] = $query->equals('ttra', 13);
$subConstraints[] = $query->equals('ttra', 14);
$constraints[] = $query->logicalOr($subConstraints);
$constraints[] = $query->logicalNot(
$query->equals('logo', '')
));
$query->matching($query->logicalAnd($constraints));
对于您的 PublicationYears 值,您必须在匹配中进行或查询,如下所示:
我认为它可能仅适用于 PublicationYears 变量。
$query->matching($query->logicalAnd(
$query->logicalOr(
$query->equals('ttra', 12)
),
$query->logicalOr(
$query->equals('ttra', 13)
),
$query->logicalOr(
$query->equals('ttra', 14)
),
));
我有一个如下所示的 extbase 数据库查询。
$query = $this->createQuery();
$result = $query->statement("Select * FROM table1 WHERE hidden = 0 AND deleted = 0 AND (".$PublicationYears.") AND logo != '' ORDER BY uid ASC LIMIT 0, ".$iLimit." ")->execute();
return $result;
$PublicationYears = "ttra = '12' or ttra = '13' or ttra = '14'";
我按如下方式转换了这个查询,
$query = $this->createQuery();
$query->getQuerySettings()->setRespectStoragePage(FALSE);
$query->matching( $query->logicalAnd(
$query->equals('deleted', 0),
$query->equals('hidden', 0)
));
$query->matching($query->logicalAnd($PublicationYears));
$query->matching($query->logicalNot(
$query->equals('logo', '')
));
$query->setOrderings(array('uid' => Tx_Extbase_Persistence_QueryInterface::ORDER_ASCENDING));
$query->setLimit((integer)$iLimit);
$Result = $query->execute();
return $Result;
但是结果查询不包含与
相关的查询部分$query->matching($query->logicalAnd($PublicationYears));
我认为上面的查询还有其他错误。
请帮助我创建正确的查询。
提前致谢。
首先你不需要这个
$query->matching( $query->logicalAnd(
$query->equals('deleted', 0),
$query->equals('hidden', 0)
));
disable fields
根据ext_tables.php
多重匹配无效 导致你的第三次匹配
$query->matching($query->logicalNot(
$query->equals('logo', '')
));
正在覆盖之前使用的 matching()
logicalAnd
在字符串上?也不行
在你的情况下,你只需要将所有内容都放在 logicalAnd
中,这样做
$constraints = array();
$subConstraints = array();
$subConstraints[] = $query->equals('ttra', 12);
$subConstraints[] = $query->equals('ttra', 13);
$subConstraints[] = $query->equals('ttra', 14);
$constraints[] = $query->logicalOr($subConstraints);
$constraints[] = $query->logicalNot(
$query->equals('logo', '')
));
$query->matching($query->logicalAnd($constraints));
对于您的 PublicationYears 值,您必须在匹配中进行或查询,如下所示: 我认为它可能仅适用于 PublicationYears 变量。
$query->matching($query->logicalAnd(
$query->logicalOr(
$query->equals('ttra', 12)
),
$query->logicalOr(
$query->equals('ttra', 13)
),
$query->logicalOr(
$query->equals('ttra', 14)
),
));