3

SQL ステートメントを Propel に変換しようとしていますが、あまり成功していません。私はこのSQLステートメントを持っています:

SELECT id, param1, param2
              FROM Field1
              WHERE id
              in
              (
                  SELECT DISTINCT Field1_id
                  FROM Field2
                  WHERE id in
                  (
                      SELECT DISTINCT `Field2_id`
                      FROM `Field3`
                      WHERE
                      `param7` is null
                      AND param5 > 40
                  )
              ) LIMIT 0, 1000

私は生の方法でそれをやり始めました:

$connection = Propel::getConnection();
$query = "my Query";
$statement = $connection->prepare($query);
$statement->execute();
$results = $statement->fetch(PDO::FETCH_ASSOC);

これはかなりうまく機能しますが、$results が配列であるため、Propel アクションを実行できません。

では、生の方法なしでこの SQL を Propel に変換するにはどうすればよいでしょうか?

4

2 に答える 2

1

これを素早く解決するには、データベースにビューを作成し、Propel でそのビューの読み取り専用テーブルをセットアップします。その後、通常の Propel テーブルと同じようにビュー モデルを使用できます。もちろん、これ不正行為であり、ORM の純粋主義者には眉をひそめていますが、短期的にはうまくいくでしょう。

私のアプローチは、これを単純なクエリに使用したテーブルにリファクタリングしようとすることですが、大きな中心的なクエリ (特に、主要なドリルダウン画面に使用される複雑なクエリ) の場合は、喜んで実行しました。ビュー アプローチを永続的に維持します。

于 2012-07-18T22:57:56.990 に答える
0

私の知る限り、Propel はネストされたクエリを処理しません。代わりに、テーブル サブクエリを記述できます。

于 2012-07-16T07:43:08.973 に答える