propel 1.6.7 でデータを取得するのに苦労しています。
達成したいクエリのサンプルは次のとおりです。
select count(1) as amount, p1.local_id FROM panel_data pd
JOIN panel_data_has_code pp1 on (pd.panel_data_id = pp1.panel_data_id)
JOIN panel_code p1 on (pp1.panel_code_id = p1.panel_code_id AND p1.type='equipment' AND model_id = 'my_model_id')
JOIN panel_data_has_code pp2 on (pd.panel_data_id = pp2.panel_data_id)
JOIN panel_code p2 on (pp2.panel_code_id = p2.panel_code_id AND p2.type='model' AND p2.local_id='my_local_id')
GROUP BY p1.local_id
しかし、Propel ORM で適切な基準を作成しようとすると、問題が発生します。明らかに、propel は、結合条件の追加を使用したり、select メソッドでエイリアスを使用しようとしたりするたびに、常に結合エイリアスをテーブル名に変換します。複数の結合条件を単純なfilterBy
方法に置き換えました (常に内部結合を使用するため、効果は同じです) が、グループ化された列 (p1.local_id) の取得にまだ問題があります。
atmで作業するコードは次のとおりです。
PanelDataQuery::create()
->select(array( 'p1.localId'))
->withColumn('count(1)', 'amount')
->usePanelDataHasCodeQuery('pp1')->usePanelCodeQuery('p1')->groupByLocalId()->filterByType($type)->endUse()->endUse()
->usePanelDataHasCodeQuery('pp2')->usePanelCodeQuery('p2')->filterByType('model')->filterByLocalId($model)->endUse()->endUse()
->find();
上記のステートメントはエラーを返します。
SELECT ステートメントを実行できません [SELECT count(1) AS amount, panel_code.LOCAL_ID AS \"p1.localId\" FROM panel_data INNER JOIN panel_data_has_code pp1 ON (panel_data.PANEL_DATA_ID=pp1.PANEL_DATA_ID) INNER JOIN panel_code p1 ON (pp1.PANEL_CODE_ID) =p1.PANEL_CODE_ID) INNER JOIN panel_data_has_code pp2 ON (panel_data.PANEL_DATA_ID=pp2.PANEL_DATA_ID) INNER JOIN panel_code p2 ON (pp2.PANEL_CODE_ID=p2.PANEL_CODE_ID) WHERE p1.TYPE=:p1 AND p2.TYPE=:p2 AND p2. LOCAL_ID=:p3 GROUP BY p1.LOCAL_ID] [ラップ: SQLSTATE[42000]: [Microsoft][SQL Server Native Client 11.0][SQL Server] マルチパート識別子 \"panel_code.LOCAL_ID\" をバインドできませんでした。
明らかに、select 句が問題を引き起こします。テーブル名に変換する代わりにテーブル エイリアスを使用するように propel を強制する方法はありますか?
よろしくお願いします。