4

我正在为网站编写 TYPO3 - 扩展程序。因为我使用的是 Extbase 框架,所以我有一个存储库类 (Tx_Extbase_Persistence_Repository),我在其中连续执行两个 sql 查询:

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

$query2 = $this->createQuery();
$query2->statement($sql2);
$res1 = $query2->execute();

$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

..但这会引发错误("could not determine the child object type"

那么如何正确地将两者结合起来Tx_Extbase_Persistence_QueryResult呢?

编辑:

结合我的意思是不是两个单独的,QueryResults我只想要一个包含来自 和 的$query1结果$query2。不幸的是,SQL-UNION 或 JOIN 不是一个选项。

4

3 回答 3

7

QueryResult 实现了 QueryResultInterface,它在其他 ArrayAccess 中进行了扩展。有了这个,您可以使用 offsetSet 方法。

foreach ($res2->toArray() as $result) {
  $res1->offsetSet(($res1->count()), $result);
}

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

于 2013-05-21T12:18:45.077 回答
2

如果您不需要 QueryResult-Object ,您可以使用array_merge来做到这一点。

$res1 = $this->createQuery()->execute();
$res2 = $this->createQuery()->execute();
$res = array_merge($res1->toArray(), $res2->toArray());
于 2016-04-19T08:26:24.510 回答
0

通过编写组合结果很难猜出你的意思是什么,但是,我只是在猜测,你应该使用自定义,你应该使用 SQL 的连接等来$query->statement($sql)获得单一。result

于 2013-04-01T22:46:15.310 回答