为什么 truncateTable 在 Joomla 3.7 中不起作用?

Why won't truncateTable work in Joomla 3.7?

我有以下代码试图运行分类table。 Joomla 文档让我相信这会奏效,但事实并非如此。我错过了什么?

$db = JFactory::getDbo();
truncate_query = $db->getQuery(true);
//$truncate_query = 'TRUNCATE ' . $db->quoteName('#__mytable');
$truncate_query->truncateTable($db->quoteName('#__mytable'));
$db->setQuery($truncate_query);
echo $truncate_query;
exit();

如果我使用注释掉的行手动生成 SQL,它确实有效。我仍然希望使用 t运行cateTable 函数的原因是我试图在事务中包含 t运行cation。当我使用手动语句时,即使事务的另一部分失败,table 仍然是 t运行cated,这很烦人,因为其他语句依赖于 t运行cated 的数据,所以如果 table 在不应该被清空时就没有数据留给 运行 再次交易。很烦人!

这是您call/execute您的 t运行cation 查询的方式:

JFactory::getDbo()->truncateTable('#__mytable');

现在有更多详细信息...

这是 Joomla 源代码中方法的代码块:

public function truncateTable($table)
{
    $this->setQuery('TRUNCATE TABLE ' . $this->quoteName($table));
    $this->execute();
}

如您所见,truncateTable() 方法需要一个表名作为其唯一参数的字符串;您提供的是反引号包装的字符串——但该方法已经提供了反引号包装服务。 (即使去掉反引号,您的方法也不会成功。)

setQuery()execute() 调用已经在方法内部,因此您不需要创建新的查询对象,也不需要手动执行任何操作。

方法中没有 return,所以默认的 null 是 returned -- 因此,您的 $truncate_query 变成了 null。当您尝试 execute(null) 时,您什么也得不到——甚至连错误消息都没有。

如果您想知道删除了多少行,您需要先运行一个SELECT查询来计算行数。

如果您想确保没有剩余的数据行,您需要调用 SELECT 并检查零行数据。

这是关于你的 JSX 问题的my answer(用不同的措辞)。