我正在努力推进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中构造适当的条件时,我都会遇到一个问题-显然,当我尝试在添加方法中使用添加连接条件或使用别名时,总是将连接别名转换为表名。我已经用简单的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量,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)内部联接panel_data_has_code pp2 ON(panel_data.PANEL_DATA_ID = pp2.PANEL_DATA_ID)内部联接panel_code p2 ON(pp2.PANEL_CODE_ID = p2.PANEL_CODE_ID)其中p1.TYPE =:p1和p2TYPE。 [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使用表别名而不是将其转换为表名吗?
预先感谢您的任何帮助。
找到部分解决方案:
PanelDataQuery::create()
->withColumn('p1.local_id','localId')
->withColumn('count(1)', 'amount')
->select(array( 'localId','amount'))
[...]
似乎工作正常。Altought,我将不胜感激其他解决方案。如何在addJoinCondition中处理类似的问题仍然是很棒的。
当我更换时:
->filterByType('model')->filterByLocalId($model)
从原始查询中,具有:
->addJoinCondition('p2', 'p2.localId = ?', $model)
->addJoinCondition('p2', "p2.type = 'model'");
我得到了与错误中所述类似的问题:推进将p2.localId转换为不正确的panel_code.local_id(查询中包含具有别名的多个panel_code表联接)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句