我有这样的查询
$packages = PackageQuery::create()
->joinPackageHasTable()
->addAscendingOrderByColumn(' CASE name
WHEN package.package_id=3 THEN 0
ELSE - 1
END')
->groupByName()
->find();
我尝试实现的是保持此查询并将ID等于3的前进行转到顶部。 此查询无法正常工作并返回
标准:(错误:无法为未定义的表获取TableMap:CASE名称 包裹时。)
表包存在于数据库和模式
中答案 0 :(得分: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();