2017-10-06 70 views
1

我有这样的查询上移一行高达行走的顶部加入

$packages = PackageQuery::create() 
      ->joinPackageHasTable() 
      ->addAscendingOrderByColumn(' CASE name 
        WHEN package.package_id=3 THEN 0 
        ELSE - 1 
       END') 
      ->groupByName() 
      ->find(); 

我试图做到的,是把这个查询和向前行,ID为3到​​顶部。 此查询不工作,返回

Criteria:(Error: Cannot fetch TableMap for undefined table: CASE name WHEN package.)

表的包无论是在数据库和架构

+0

删除'name'。你的情况似乎在'package_id'上。 –

+0

同样的错误,如果没有找到表格 – Sebastian

+0

我的答案是否对你有任何用处? =) – chocochaos

回答

0

不能使用推动这种方式排序的存在。你首先必须用别名选择你想要订购的东西,然后你可以订购它。 addAscendingOrderByColumn将检查请求的列是否由propel知道,并且自定义sql不被识别。


例如,在我自己的项目中,我使用下面的代码:

 $query->withColumn(
      'ISNULL(' . BlaBlaTableMap::COL_MIN_LEFT . ')', 
      'not_unlimited' 
     ); 
     $query->orderBy('not_unlimited'); 

在你的情况,我认为像这样的工作:

 $packages = PackageQuery::create() 
      ->withColumn(
       sprintf(
        'CASE WHEN %s = 3 THEN -1 ELSE 0 END', 
        PackageHasTableTableMap::COL_PACKAGE_ID 
       ), 
       'is_not_three' 
      ) 
      ->orderBy('is_not_three') 
      ->usePackageHasTableQuery() 
      ->endUse() 
      ->groupByName() 
      ->find();