我无法使用php代码在Joomla文章中引用数据库视图。尽管我可以访问表,但无法引用视图。请注意,数据使用phpMyAdmin存储在MySQL中。以下是我的代码,其中视图名称是jos2_vw_member_contribution。
<?php
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('Recipient','Target', 'Actuals'))));
$query->from($db->quoteName('jos2_vw_member_contribution'));
$query->setOrder('Recipient','ASC');
$db->setQuery($query);
$results = $db->loadObjectList();
?>
以上抛出错误 1146-表'。#__ vw_member_contribution'不存在。
感谢您对上述问题的早期帮助。另外,我强烈建议不使用此线程来讨论视图与表用法的优缺点。
谢谢, Paippad。
答案 0 :(得分:0)
根据Joomla's Coding Standards(标为: SQL查询),您不应在字面上命名表“前缀”,而应使用#__
。 (尽管您的错误表明您正在使用#__
。)
表名前面的那个讨厌的小.
看起来很麻烦。您最好检查一下您的表名是否正确:PHP中的#__vw_member_contribution
。
->setOrder()
将悄悄终止查询,因为它不是查询方法(资源:https://api.joomla.org/cms-3/classes/JDatabaseQuery.html),您应该使用order()
建议的未经测试的代码段,带有诊断和错误捕获功能:
$db = JFactory::getDbo();
$query = $db->getQuery(true)
->select($db->quoteName(array('Recipient','Target','Actuals')))
->from($db->quoteName('#__vw_member_contribution'))
->order($db->quoteName('Recipient')); // ASC is the default direction
JFactory::getApplication()->enqueueMessage("<div>Rendered Select Query:<br>" . $query->dump() . "</div>", 'notice'); // don't show to public
try
{
$db->setQuery($query);
if (!$results = $db->loadObjectList()) // declare and check $result
{
echo "No matches found";
}
else
{
// do your thing with $result
}
}
catch (Exception $e)
{
JFactory::getApplication()->enqueueMessage("Query Syntax Error: " . $e->getMessage(), 'error'); // don't show to the public
}
p.s。遇到Joomla问题时,请将其发布在Joomla Stack Exchange上,以从具有Joomla专门知识的志愿者那里获得宝贵的反馈意见。