在Extbase存储库中组合两个QueryResults

Fab*_*itz 4 php typo3 extbase typo3-flow

我正在为一个网站编写TYPO3扩展程序.由于我使用的是Extbase Framework,因此我有一个Repository类(Tx_Extbase_Persistence_Repository),我连续执行两个SQL查询:

$query1 = $this->createQuery();
$query1->statement($sql1);
$res1 = $query1->execute();

$query2 = $this->createQuery();
$query2->statement($sql2);
$res1 = $query2->execute();
Run Code Online (Sandbox Code Playgroud)

双方$res1和$res2包含Tx_Extbase_Persistence_QueryResult.现在我想返回合并后的结果,我不知道如何完成.返回原始数组不是一个选项,因为我依赖于QueryResult类的函数,我也想避免组合sql(UNION,JOIN).我已经尝试过了:

$myResult = $this->objectManager->create('Tx_Extbase_Persistence_ObjectStorage')
foreach($res1 as $obj) {
    $myResult->attach($obj);
}
//foreach $res2
Run Code Online (Sandbox Code Playgroud)

..但这会抛出一个错误("could not determine the child object type")

那么你如何正确地结合两个Tx_Extbase_Persistence_QueryResult

编辑:

通过组合,我的意思是代替两个单独的QueryResults我想要只包含两个结果$query1以及$query2.遗憾的是,SQL-UNION或JOIN不是一个选项.

小智 7

QueryResult实现了QueryResultInterface,它扩展了ArrayAccess.有了这个,你可以使用offsetSet方法.

foreach ($res2->toArray() as $result) {
  $res1->offsetSet(($res1->count()), $result);
}
Run Code Online (Sandbox Code Playgroud)

QueryResult $ res1现在也包含来自$ res2的对象.