0

DoctrineでSymfony2を使用しています。私はたくさんのエンティティ(テーブル)を持っています、そしてこれが私が達成しようとしていることです:

問題

たとえばfrom_date、すべてのエンティティには2つのフィールド(列)が必要to_dateです。デフォルトでは。product.orm.ymlファイルに次のエンティティが定義されているとします。

Some\Random\Namespace\Product:
    type: entity
    table: product
    id:
        id:
            type: integer
            generator:
                strategy: AUTO
    fields:
        name:
            type: string
            length: 255
        description:
            type: text
        price:
            type: float

実行した後doctrine:schema:update、作成されたテーブルにはすでに列が含まfrom_dateれているはずです。to_dateここで、データベースからすべての製品をフェッチしようとしているとしましょう。私はそうするでしょう:

$products = $this->getDoctrine()->getRepository('SomeRandomBundle:Product')->findAll();

これは通常、データベースからすべての製品をフェッチします。私がやりたいのは、from_date<= some_date<=である製品のみをフェッチすることto_dateです。getSomeDate()の値を取得するために、Doctrineが呼び出す必要のある関数がありますsome_date。DQLで記述されたカスタムクエリでも機能するはずです。

$products = $this->getDoctrine()->getRepository('SomeRandomBundle:Product')->findByPrice(20);

ただし、findメソッドまたはカスタムDQLクエリを使用してPKでエンティティをフェッチしようとする場合には影響しません。

追加の詳細

上記の規則に従わないエンティティもいくつかあります。

+すべてのエンティティでチェックを作成from_dateto_dateて実行できることはわかっていますが、アプリケーションには何千ものクエリがあるため、コードが読みにくくなるだけです。

ゴール

上記の目的は、ユーザーが過去のどこにいても、アプリケーションの状態をそのまま確認できるようにすることです。同じ目標を達成できる別のアプローチを知っているなら、それも素晴らしいでしょう。

お時間をいただきありがとうございます!

4

1 に答える 1

1
  1. すべてのエンティティにカスタムフィールドを追加するには、次のことができます

  2. データをフェッチするときに追加のチェックを行うために、findAll/findByが追加のチェックでカスタムDQLを使用するカスタムリポジトリクラスを設定することもできます

  3. DQLクエリの実行時にチェックを追加するには、DQLカスタムウォーカーを指定できます

于 2012-11-13T21:30:53.390 に答える