Переместитесь на один ряд вверх в Propel с помощью join
У меня такой запрос
$packages = PackageQuery::create()
->joinPackageHasTable()
->addAscendingOrderByColumn(' CASE name
WHEN package.package_id=3 THEN 0
ELSE - 1
END')
->groupByName()
->find();
То, что я пытаюсь добиться, это сохранить этот запрос и переслать строку с идентификатором, равным 3 до верха. Этот запрос не работает и возвращает
Критерии:(Ошибка: Невозможно извлечь TableMap для неопределенной таблицы: имя CASE, КОГДА пакет.)
пакет таблиц существует как в базе данных, так и в схеме
1 ответ
Вы не можете заказать таким образом, используя Propel. Сначала вы должны выбрать все, что вы хотите заказать с псевдонимом, а затем вы можете заказать это. 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();