TYPO3 QueryRepository returns 为空,不能用作条件
TYPO3 QueryRepository returns empty and can not use it as condition
我在我的存储库文件中创建了一个查询,用于搜索具有特定值的对象。例如:
/**
* @param int $uid
* @param string $value
* @param int $someIntValue
*
* @return array|\TYPO3\CMS\Extbase\Persistence\QueryResultInterface
*/
public function findByFields($uid, $value, $someIntValue)
{
$query = $this->createQuery();
$query->getQuerySettings()->setRespectStoragePage(FALSE);
$query->matching(
$query->logicalAnd(
[
$query->equals('some_field', $uid),
$query->equals('value', $value),
$query->equals('some_other_field', $someIntValue)
])
);
return $query->execute();
现在这给了我一个空对象,这很好,因为我在数据库中没有任何符合要求的东西。
但是如果我想添加一个条件来评估对象是否为空,则它不起作用。
我任务中的代码
$getObjects = $someRepository->findByFields($oldObject->getUid(), $oldObject->getValue, $oldObject->getExternalValue);
if(empty($getObjects))
{
// do something
}
else
{
// do something else
}
此处无法将对象评估为空,因为它实际上不是空的。如果我将它转换为一个数组:(只是为了看看里面有什么)
$typecasted = (array)$getObjects;
它返回 "empty" 对象中存在的内容。 (var_dump)
*dataMapper => TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper singleton object filtered
*persistenceManager => TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager singleton object filtered
*numberOfResults => NULL
*query => TYPO3\CMS\Extbase\Persistence\Generic\Query prototype object
*queryResult => NULL
问题:
如何使条件生效?
我找到了解决方法。
如果没有找到TYPO3 returns查询。我所要做的就是:
if($query->execute()->count())
{
return $query->execute();
}
else
{
return NULL;
}
这是做什么的,它评估是否有可用的对象。如果是,那么它会返回对象。如果不是,它将结果设置为 NULL 并且可以使用该条件。
编辑:
以上方法有效,但在@Mathias Brodala 的推荐下,我也尝试了类似的方法。
if (count($getObjects) > 0)
{
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump('exists');
} else {
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump('does not exist');
}
两种方式都行。任你选。
感谢@Mathias Brodala
我在我的存储库文件中创建了一个查询,用于搜索具有特定值的对象。例如:
/**
* @param int $uid
* @param string $value
* @param int $someIntValue
*
* @return array|\TYPO3\CMS\Extbase\Persistence\QueryResultInterface
*/
public function findByFields($uid, $value, $someIntValue)
{
$query = $this->createQuery();
$query->getQuerySettings()->setRespectStoragePage(FALSE);
$query->matching(
$query->logicalAnd(
[
$query->equals('some_field', $uid),
$query->equals('value', $value),
$query->equals('some_other_field', $someIntValue)
])
);
return $query->execute();
现在这给了我一个空对象,这很好,因为我在数据库中没有任何符合要求的东西。
但是如果我想添加一个条件来评估对象是否为空,则它不起作用。
我任务中的代码
$getObjects = $someRepository->findByFields($oldObject->getUid(), $oldObject->getValue, $oldObject->getExternalValue);
if(empty($getObjects))
{
// do something
}
else
{
// do something else
}
此处无法将对象评估为空,因为它实际上不是空的。如果我将它转换为一个数组:(只是为了看看里面有什么)
$typecasted = (array)$getObjects;
它返回 "empty" 对象中存在的内容。 (var_dump)
*dataMapper => TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper singleton object filtered
*persistenceManager => TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager singleton object filtered
*numberOfResults => NULL
*query => TYPO3\CMS\Extbase\Persistence\Generic\Query prototype object
*queryResult => NULL
问题:
如何使条件生效?
我找到了解决方法。
如果没有找到TYPO3 returns查询。我所要做的就是:
if($query->execute()->count())
{
return $query->execute();
}
else
{
return NULL;
}
这是做什么的,它评估是否有可用的对象。如果是,那么它会返回对象。如果不是,它将结果设置为 NULL 并且可以使用该条件。
编辑:
以上方法有效,但在@Mathias Brodala 的推荐下,我也尝试了类似的方法。
if (count($getObjects) > 0)
{
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump('exists');
} else {
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump('does not exist');
}
两种方式都行。任你选。
感谢@Mathias Brodala