我在下面有一个简单的Propel查询,它是根据国家/地区代码(按字母顺序排序)进行过滤。但是,我需要能够执行过滤器以在顶部制作某种countrycode
视图。这可能使用单个 Propel 查询吗?
我的查询(目前):
$query = CountryQuery::create()
->filterByCountrycode($countryCode)
->find();
现在这只会找到单个项目,因为我的结果每个国家/地区代码只有一个结果(没有重复)。但是,我本以为下一步将执行另一个查询并找到所有结果并将它们合并在一起,但是执行两个查询似乎适得其反。有没有更好的方法
?例:
如果国家/地区代码为 GB,则上述查询将输出英国。但是,期望的结果将按字母顺序给出国家列表,但第一项将是英国。
按照@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();