推动使用单个查询获取结果并更改顺序
Propel using a single query to get a result and change the order
我在下面有一个简单的 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();
我在下面有一个简单的 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();