2

不動産 (セール) から物件 (ティーザー) を削除しました。CLI を使用してデータベースとエンティティを更新しました。

$ php app/console doctrine:schema:update --complete --force
$ php app/console doctrine:generate:entities Our --no-backup
$ php app/console doctrine:cache:clear-metadata
$ php app/console doctrine:cache:clear-result

そして、キャッシュをクリアしました:

$ php app/console cache:clear --no-optional-warmers --no-warmup

今、クエリビルダーによって作成されたクエリがあります:

$qb = $this->createQueryBuilder('s');
$q = $qb
    ->select('s.id')
    ->leftJoin('s.bills','b')
    ->where('b.paid = true')
    ->getQuery()
    ->getResult();

これは、古いプロパティを含む select ステートメントを生成するため、エラーをスローします。

Column not found: 1054 Unknown column 's0_.teaser' in 'field list'

Doctrine がクエリを実行する方法を理解しようとしましたが、問題の原因を見つけることができませんでした。誰にも手がかりはありますか?

更新: querybuilder によって生成されたクエリから DQL を取得し、それを使用して新しいクエリを作成しました。同じエラー。次に、DQL の 1 つの単語を大文字から小文字に変更し ( LEFTLeftになりました)、その単語は問題なく実行されました。

$q = $this->getEntityManager()
->createQuery('SELECT s,b FROM Our\BuyBundle\Entity\Sale s Left JOIN s.bills b WHERE s.id IN (:randomIds)')
->setParameter('randomIds', $allSaleIds);

そのため、DQLステートメントはどこかにキャッシュされているようで、DQLをハッシュとして使用して、対応するSQLステートメントを取得します。そのキャッシュされた情報をどこでどのようにクリアするのか、まだよくわかりません。特に、アプリ/キャッシュフォルダー内のすべてのコンテンツも削除したという事実を考えると.

UPDATE2: 解決策が見つかりました。コンソールではできないため、APC キャッシュを手動でクリアする必要がありました。したがって、ソリューションは次のようになります。

$ php app/console doctrine:cache:clear-query

それでもうまくいかない場合は、APC キャッシュをクリアしてください。

4

1 に答える 1

2

私の問題は APC キャッシュでした。

コンソールは APC キャッシュをクリアできない (または許可されていない) ため、 CLI ( app/console ) でクエリキャッシュをクリアできませんでした。そのため、APC キャッシュを手動でクリアする必要がありました。

解決策は次のとおりです。

$ php app/console doctrine:cache:clear-result

それでもうまくいかない場合は、APC キャッシュ(または使用しているキャッシュ) を手動でクリアします。

于 2013-04-09T14:18:50.153 に答える