Как назначить псевдонимы массиву имен столбцов с помощью quoteName () Joomla? - PullRequest
0 голосов
/ 30 октября 2018

Я хочу использовать оператор AS для псевдонимов в запросе. Я использую этот кусок кода:

$query->select($db->quoteName(array('NameInQ as nin', 'Name')));

В любом случае я получаю эту ошибку:

'Неизвестный столбец' NameInQ as nin 'в' списке полей '

NameInQ существует как имя столбца в таблице. nin должен быть псевдонимом.

Что я делаю не так?

1 Ответ

0 голосов
/ 30 октября 2018

Когда вы говорите Joomla:

$query->select($db->quoteName(array('NameInQ as nin', 'Name')));

echo $query->dump(); скажет вам:

SELECT `NameInQ as nin`,`Name` 

Посмотрите, как он не знает, как отличить имя столбца с псевдонимом от строки с пробелами в нем?

Документы: https://api.joomla.org/cms-3/classes/JDatabaseQuery.html#method_quoteName

Если вы хотите назначить псевдонимы именам столбцов в Joomla из метода qn() / quoteName(), вам нужно будет назначить соответствующие псевдонимы для всех столбцов.

$query->select($db->quoteName(array('NameInQ', 'Name'), array('nin', 'Name')));

Отображается как:

SELECT `NameInQ` AS `nin`,`Name` AS `Name`
//     ^-------^----^---^-^----^----^----^-- everything aliased, everything backtick wrapped

Или, конечно, вы можете индивидуализировать quoteName() вызовы, вы можете избежать псевдонимов для каждого столбца.

$query->select(array($db->quoteName('NameInQ', 'nin'), $db->quoteName('Name')));

Отображается как:

SELECT `NameInQ` AS `nin`,`Name`

Наконец, правда в том, что вам даже не нужно , чтобы заключить в кавычки любое из имен столбцов вашего примера, потому что запрос будет стабильным / безопасным без дополнительных вызовов метода. * Я рекомендую не использовать их, чтобы свести к минимуму раздувание запросов и усталость глаз разработчика.

$query->select(array('NameInQ AS nin', 'Name'));

или даже в необработанном виде:

$query->select('NameInQ AS nin, Name');

Для записи, Name (MYSQL не чувствителен к регистру) - это КЛЮЧЕВОЕ СЛОВО, но это НЕ РЕЗЕРВНОЕ КЛЮЧЕВОЕ СЛОВО.

См. Документ MySQL: https://dev.mysql.com/doc/refman/5.5/en/keywords.html#keywords-5-5-detailed-N (рядом с Name

нет "(R)" *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...