我正在编写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();
$res
1和$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
..但这会引发错误("could not determine the child object type"
)
那么如何正确组合两个Tx_Extbase_Persistence_QueryResult
?
修改
通过组合,我的意思是代替两个单独的QueryResults
,我想要的只包含$query1
和$query2
的结果。不幸的是,SQL-UNION或JOIN不是一个选项。
答案 0 :(得分:7)
QueryResult实现了QueryResultInterface,它扩展了其他ArrayAccess。 有了这个,你可以使用offsetSet方法。
foreach ($res2->toArray() as $result) {
$res1->offsetSet(($res1->count()), $result);
}
QueryResult $ res1现在也包含来自$ res2的对象。
答案 1 :(得分:2)
如果您不需要QueryResult-Object,可以使用array_merge来完成此操作。
$res1 = $this->createQuery()->execute();
$res2 = $this->createQuery()->execute();
$res = array_merge($res1->toArray(), $res2->toArray());
答案 2 :(得分:0)
通过编写组合结果很难猜出你是什么意思,但是,我只是在猜测,你应该使用自定义$query->statement($sql)
来获取单result
使用SQL的连接等。