->joinOrigin('origin')
->joinLocation('location', \Criteria::LEFT_JOIN)
->where("LOWER(IF(location.code IS NOT NULL,location.code, origin.code)) NOT IN ?", $not_in_old_job_search_array)
是我从原始SQL移植的Propel查询的一部分。 location
和origin
是指向同一个表的两个外键(在schema.xml中声明)。 Propel正确地添加了连接:
INNER JOIN `idb_countries` `origin`
ON (idb_ads.idb_countries_ididb_origin=origin.ididb_countries)
LEFT JOIN `idb_countries` `location`
ON (idb_ads.idb_countries_ididb_job_location=location.ididb_countries)
但where子句如下:
LOWER(IF(idb_countries.code IS NOT NULL,idb_countries.code, idb_countries.code)) NOT IN (:p5,:p6,:p7))
我该如何避免这种情况?
编辑:我的推进版本是1.7.0,我的php版本是5.4.9
答案 0 :(得分:3)
我认为你的问题比Propel: selecting columns from aliased join tables所描述的更简单。
尝试使用where where()调用:
->where(
"LOWER(IF(location.Code IS NOT NULL,location.Code, origin.Code)) NOT IN ?",
$not_in_old_job_search_array
)
您会注意到唯一的区别是我已将“代码”更改为“代码”。 where()
方法期望列的PHP名称,而不是实际的列名。别名与PHP名称一起存储,因此“Code”让它知道使用别名,而“code”则不知道。