Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Joomla 每个版本的SQL更新文件以及内容是什么_Joomla_Joomla3.0_Joomla Extensions - Fatal编程技术网

Joomla 每个版本的SQL更新文件以及内容是什么

Joomla 每个版本的SQL更新文件以及内容是什么,joomla,joomla3.0,joomla-extensions,Joomla,Joomla3.0,Joomla Extensions,部署Joomla组件时,我为数据库放入了一个更新文件。即使数据库没有任何更改。这是必要的吗 和:内容是什么?对于从版本3到版本4的更改,我是否只需要放置这些SQL语句,还是必须同时放置从版本1到版本2的更改 致意 DreiBaer我已经做了一些测试,对于不需要对数据库进行任何更改的组件版本,您似乎不需要SQL更新文件。然而,在较旧的Joomla版本中,情况可能并不总是如此,见下文 当您在Joomla站点上安装组件时,如果该站点还没有组件的版本,那么运行的唯一sql文件就是清单文件的安装节点中引用

部署Joomla组件时,我为数据库放入了一个更新文件。即使数据库没有任何更改。这是必要的吗

和:内容是什么?对于从版本3到版本4的更改,我是否只需要放置这些SQL语句,还是必须同时放置从版本1到版本2的更改

致意
DreiBaer

我已经做了一些测试,对于不需要对数据库进行任何更改的组件版本,您似乎不需要SQL更新文件。然而,在较旧的Joomla版本中,情况可能并不总是如此,见下文

当您在Joomla站点上安装组件时,如果该站点还没有组件的版本,那么运行的唯一sql文件就是清单文件的
安装
节点中引用的sql文件。该文件可能类似于
sql/install.mysql.utf8.sql

只要站点没有组件的任何版本,那么即使您正在安装一个更高版本(如2.3.1),并且这个更高版本确实有一些SQL更新文件,也不会执行这些文件,只执行这个版本(2.3.1)的安装文件。但是在这种情况下,如果不执行SQL更新文件,将解析它们的版本号,并针对Joomla的schemas表中的组件存储最大版本号。例如,如果组件的版本2.3.1包含SQL更新文件0.0.1.SQL、1.0.1.SQL、1.2.1.SQL和2.0.4.SQL,那么在第一次安装此组件时,schemas表的版本id将为2.0.4

更新组件时,不会执行安装SQL文件。Joomla检查已安装的
组件的架构版本,然后依次执行架构版本号大于已安装架构版本号的每个SQL更新文件。例如,如果您安装了组件,并且该组件的架构版本为1.5.2,并且您的更新包含SQL更新文件1.4.1、1.5.0、1.5.2、1.5.19和1.6.0,则仅执行SQL脚本1.5.19和1.6.0,并按该顺序执行

如果您是第一次安装组件,并且没有更新文件,则架构表包含一个带有空白版本id字段的记录。如果随后使用包含SQL更新文件的版本更新该组件,则原始架构版本将计算为零,并执行所有更新文件

这意味着,对于组件的每个版本,SQL安装文件必须具有所有必要的SQL语句,以使数据库处于组件版本的正确状态。在安装时,即使是安装了更高版本的组件,也不会运行任何更新,因此可以用来操作数据库的唯一SQL是安装文件中的SQL

为了使您的组件能够正确升级,您必须具有SQL更新文件,该文件可以接受安装的版本与您尝试更新的版本之间的任何内容。例如,如果管理员在更新组件方面落后,并且安装了版本1.0.0,并且希望直接更新到您的最新版本,例如4.0.0,那么版本4.0.0需要包含从1到2、2到3、3到4的更新以及之间的任何颠覆

Joomla的文档确实讨论了您提出的问题,但是它已经过时(对于2.5版),我认为这些信息不再准确

本文说,对于没有任何SQL更新的版本,有必要使用空白的SQL更新文件,否则将不会执行SQL更新文件的后续更新,但是我已经测试过了,这似乎不是问题。这在Joomla的旧版本中可能是正确的,但在我测试的版本(3.5.7)中不是正确的

坚持文档中描述的约定可能是最好的做法——包括空的SQL更新文件,因为这不会造成伤害,并且由于我在测试中发现的行为是未记录的,所以将来可能会在没有警告的情况下更改


文档还指出组件版本需要与更新SQL文件版本匹配,但我再次发现这不再正确。您可以使用完全独立于组件版本控制的SQL模式版本控制,而不会出现任何问题。然而,再次强调,保持模式和组件版本一致可能是一个好主意-我想不出一个不这样做的好理由。

不知何故,我的sql更新文件即使在组件的第一部分也会运行。