推进翻译错误的表名(Propel translating the wrong table names

2019-10-19 01:16发布

            ->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)

是Propel查询语句我从原始的SQL移植的一部分。 locationorigin有两个外键(在schema.xml中声明为这样的),它指向同一个表。 推进增加适当的加入:

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

Answer 1:

我觉得你是一个比在描述简单的问题行走:从别名连接表中选择列 。

尝试使用这个地方()调用:

->where(
    "LOWER(IF(location.Code IS NOT NULL,location.Code, origin.Code)) NOT IN ?",
    $not_in_old_job_search_array
)

你会注意到,唯一的区别是,我已经改变了“代码”到“代码”。 在where()方法需要的列,而不是实际的列名的PHP名称。 别名存储与PHP的名字,所以“守则”让它知道要使用别名,而“代码”没有。



文章来源: Propel translating the wrong table names
标签: php sql propel