我在下面有一个简单的Propel查询,它根据国家/地区代码进行过滤(按字母顺序排序)。但是,我需要能够进行过滤以在顶部创建某个countrycode
视图。这可能是使用单个Propel查询吗?
我的查询(目前):
$query = CountryQuery::create()
->filterByCountrycode($countryCode)
->find();
现在只能找到单个项目,因为我的结果每个国家/地区代码只有一个结果(没有重复项)。但是,我本以为下一步会做另一个查询并找到所有结果并将它们合并在一起,但是做两个查询似乎适得其反。有没有更好的方法呢?
示例:
如果国家/地区代码为GB,则上述查询将输出英国。但是,所期望的结果将按字母顺序给出国家名单,但第一项是联合王国。
答案 0 :(得分:2)
正如@halfer建议的那样,您可以添加虚拟列并按顺序排序。这是查询:
$countryCode = 'ru';
$countries = \CountryQuery::create()
->addAsColumn('order_field', "CASE WHEN code = '$countryCode' THEN 1 ELSE 0 END")
->select(array('Id', 'Name', 'Code'))
->orderBy('order_field', \Criteria::DESC)
->orderById(\Criteria::ASC)
->find();