2016-05-06 21 views
0

私のsymfonyプロジェクトでは、1対多の関係にある2つのエンティティがあります。だから、唯一の違いは、私がASCを使用する最初のポストのために、最後のために、->orderBy()中であるSymfony Doctrineディセーブルキャッシュ

public function getFirstPost(Topic $topic) 
{ 
    $query = $this->createQueryBuilder('t') 
     ->addSelect('p') 
     ->join('t.posts', 'p') 
     ->where('t.id = :topic_id') 
     ->setParameter('topic_id' => $topic->getId()) 
     ->orderBy('p.id', 'ASC') 
     ->setMaxResults(1) 
     ->getQuery(); 
    return $query->getOneOrNullResult(); 
} 
public function getLastPost(Topic $topic) 
{ 
    $query = $this->createQueryBuilder('t') 
     ->addSelect('p') 
     ->join('t.posts', 'p') 
     ->where('t.id = :topic_id') 
     ->setParameter('topic_id' => $topic->getId()) 
     ->orderBy('p.id', 'DESC') 
     ->setMaxResults(1) 
     ->getQuery(); 
    return $query->getOneOrNullResult(); 
} 

:私は最初と最後の子を見つける必要があるので、私はこのようになりリポジトリ機能を使用 私はDESCを使用します。

私のコントローラからこれらの機能の1つを使用すると、期待した結果が返され、うまく動作します。しかし、私がコントローラから同時に両方を実行すると、同じ結果が返されますが、同じ結果は返されません。

私の推測では、Doctrineはこれらのクエリと結果をどうにかしてキャッシュするので、同じ結果を返す理由は$query->useResultCache(false)ですが、何もしませんでした。

私の質問は、どうしてこれが起こっているのですか?どうすれば解決できますか?

+0

あなたが1つのポストだけでなく、があることを確認しています渡されたトピックで? –

+0

はい、私がテストしているトピックには、Id 17の最初の子とId 23の最後の子があり、合計で4人の子供が含まれています – Kable

答えて

2

実際にはキャッシュの問題ですが、主にクエリの問題です。これらの関数で投稿を返すのではなく、結合した投稿でトピック全体を返します。

これらのクエリを書き換えてPostエンティティを直接選択し、それによってフィルタリングされるTopicエンティティに参加させることができます。

あなたは本当に(これを行ういけない)あなたがそれらのいずれかの方法で返された最初のトピックを切り離し、その後、他のメソッドを呼び出すことができます動作するように、これらのクエリが必要な場合:

$this->getDoctrine()->getManager()->detach($firstTopic); 
+0

'post'を照会し、' Topic'をトリックしました。ありがとうございました! – Kable

関連する問題