Doctrine2のIN文でサブクエリを使用しようとしています。ここでDoctrine 2 limit INサブクエリ
は生のSQLクエリがどのように見えるかです:私が何をしたいか
SELECT * FROM license
WHERE id
IN (SELECT id
FROM license
WHERE subscription = x
ORDER BY date DESC
LIMIT 5)
ORDER BY name ASC;
名前順5件の最後の結果を表示するので、私は最初で最後の5件の結果を照会してからオーダーする必要がありますメインクエリの名前。
問題は、内部クエリをLIMITできないように見えることです。私が注文し、制限すること(カスタムメソッドを介して)、その後、私は2番目のクエリでそれを使用しようと、あなたが見ることができるように
$qb = $this->createQueryBuilder('l');
$qb->select('l.id');
$qb = $this->whereSubscriptionId($qb, $subscription_id);
$qb = $this->offsetLimitOrder($qb, 0, 5, 'deliveryDatetime desc');
//Second Query, adds the "order by X"
$qb2 = $this->createQueryBuilder('l2');
$qb2->add('where', $qb2->expr()->in('l2.id', $qb->getQuery()->getDQL()));
if(isset($order)){
$order = explode(' ', $order);
$qb2->addOrderBy('l2.'.$order[0], $order[1]);
}
return $qb2->getQuery()
->getResult();
が、私は私の最初のクエリを作成します。
は、ここに私の現在のコードです。
しかし、LIMITは最初のクエリのDQLをvar_dumpするときにLIMITが存在しないため、$ qb2-> getQuery() - >を実行すると完全に無視されるので、LIMITはDQL文の一部ではないようですgetResult();
私は最初のクエリを起動し、2番目のクエリで手動で結果を入力することで動作させましたが、それは醜いです。
正しく行う方法はありますか?
ありがとうございます!
QueryBuilderのsetMaxResults関数を使用できますか? – Michael
はい、IN副選択用とグローバルDQL用の2つの問合せビルダーを作成できます。最初のものでは 'setMaxResults'を使います。 – Florian
DQLに含まれていない制限の主な理由はキャッシングだと思われます - http://www.doctrine-project.org/jira/browse/DDC-885 – gregor