4

私は TYPO3 をプログラミングしています - ウェブサイトの拡張機能です。Extbase Framework を使用しているので、2 つの SQL クエリを続けて実行するリポジトリ クラス (Tx_Extbase_Persistence_Repository) があります。

$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"

では、どうすれば 2 つを適切に組み合わせることができるTx_Extbase_Persistence_QueryResultでしょうか。

編集:

結合とは、2 つの別々の代わりに、 と のQueryResults両方の結果を含む 1 つだけが必要であることを意味$query1$query2ます。残念ながら、SQL-UNION または JOIN はオプションではありません。

4

3 に答える 3

7

QueryResult は、とりわけ ArrayAccess を拡張する QueryResultInterface を実装します。これにより、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 に答える