如何使用 Joomla 的 quoteName() 为列名数组分配别名?

How to assign aliases to an array of column names with Joomla's quoteName()?

我想在查询中对别名使用 AS 语句。 我使用这段代码:

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

无论如何我得到这个错误:

'Unknown column 'NameInQ as nin' in 'field list'

NameInQ 确实作为列名存在于 table 中。 nin 应该是别名。

我做错了什么?

当你告诉 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

如果您想从 qn() / quoteName() 方法中为 Joomla 中的列名称分配别名,您需要为所有列指定相应的别名。

$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`

最后,事实是:您甚至 不需要 引用任何示例列名称,因为查询将 stable/secure 没有额外的方法调用(s). *我建议将它们排除在外,以最大程度地减少查询膨胀和开发人员的眼睛疲劳。

$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-NName

旁边没有“(R)”