Moodle插件开发笔记11: Database操作(一)

一、Moodle db table的规则: ·第一个字段是一个整数字段称为主键id ·表的名称不能超过28个字符 ·字段名称不能超过30个字符 ·表字符集(整理)应该是UTF8字符…

一、Moodle db table的规则:
·第一个字段是一个整数字段称为主键id
·表的名称不能超过28个字符
·字段名称不能超过30个字符
·表字符集(整理)应该是UTF8字符集,以支持多国语言文字
·任何插件表名称的第一部分应包含插件的名称本身
·指数(Indices)应创建常常被认为是用于搜索查询的领域,并在需要时,应建立组合指数

创建和管理你plugin db table是使用你的plugin的“db”子目录里的install.xml and upgrade.php。
二、 Install.xml
   install.xml文件包含为您的新插件所需表的XML定义。有了install.xml,当你的插件安装到moodle时,moodle就会检测它来创建数据表。
  下面是一个install.xml 例子
<?xml version=”1.0″ encoding=”UTF-8″ ?>
<XMLDB PATH=”mod/label/db” VERSION=”20060905″ COMMENT=”XMLDB file for Moodle mod/label”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:noNamespaceSchemaLocation=”../../../lib/xmldb/xmldb.xsd”
>
<TABLES>
<TABLE NAME=”label” COMMENT=”Defines labels”>
<FIELDS>
<FIELD NAME=”id” TYPE=”int” LENGTH=”10″ NOTNULL=”true” UNSIGNED=”true” SEQUENCE=”true” ENUM=”false” NEXT=”course”/>
<FIELD NAME=”course” TYPE=”int” LENGTH=”10″ NOTNULL=”true” UNSIGNED=”true” DEFAULT=”0″ SEQUENCE=”false” ENUM=”false” PREVIOUS=”id” NEXT=”name”/>
<FIELD NAME=”name” TYPE=”char” LENGTH=”255″ NOTNULL=”true” SEQUENCE=”false” ENUM=”false” PREVIOUS=”course” NEXT=”content”/>
<FIELD NAME=”content” TYPE=”text” LENGTH=”small” NOTNULL=”true” SEQUENCE=”false” ENUM=”false” PREVIOUS=”name” NEXT=”timemodified”/>
<FIELD NAME=”timemodified” TYPE=”int” LENGTH=”10″ NOTNULL=”true” UNSIGNED=”true” DEFAULT=”0″ SEQUENCE=”false” ENUM=”false” PREVIOUS=”content”/>
</FIELDS>
<KEYS>
<KEY NAME=”primary” TYPE=”primary” FIELDS=”id” />
</KEYS>
<INDEXES>
<INDEX NAME=”course” UNIQUE=”false” FIELDS=”course”/>
</INDEXES>
</TABLE>
</TABLES>
<STATEMENTS>
<STATEMENT NAME=”insert log_display” TYPE=”insert” TABLE=”log_display” COMMENT=”Initial insert of records on table log_display”>
<SENTENCES>
<SENTENCE TEXT=”(module, action, mtable, field) VALUES (‘label’, ‘add’, ‘label’, ‘name’)”/>
<SENTENCE TEXT=”(module, action, mtable, field) VALUES (‘label’, ‘update’, ‘label’, ‘name’)”/>
</SENTENCES>
</STATEMENT>
</STATEMENTS>
</XMLDB>

三、Upgrade.php
    如果你想update 你的plugin的db table,就可以使用upgrade.php。当你把new version的plugin安装到moodle时,moodle detect到是new version,就会运行upgrade.php文件来添加新表/添加新字段到现有的表/更改字段的格式/创建新的索引。
    Upgrade.php必须包含一个upgrade function,其格式为:xmldb_[module name]_upgrade,该函数以oldversion作为参数,它是指在安装当前最新version的plugin之前的旧version的版本号
注意:不同类型的plugin的版本号储存在不同的moodle db table里:
·         Module version numbers are in the module table
·         Block version numbers are in the block table
·         All others (assignment types, question types, and so on) are in the config table
例如:
<?php //$Id: upgrade.php,v 1.1.2.14 2009/07/09 18:04:27 mchurch Exp $
function xmldb_questionnaire_upgrade($oldversion=0) {
global $CFG;
$result = true;
if ($oldversion < 2008060402) {
    //定义a table and a field and set field properties
$table = new XMLDBTable(‘questionnaire_question_type’);
$field = new XMLDBField(‘response_table’);
$field->setAttributes(XMLDB_TYPE_CHAR, ’32’, null, XMLDB_NOTNULL, null, null, null, null, ‘has_choices’);
$field->setNotnull(false);
//由于该table存在,所以下列语句是修改field的属性
$result &= change_field_notnull($table, $field);
}
if ($oldversion < 2008060403) {
   //定义a table and a index and set index properties
$table = new XMLDBTable(‘questionnaire_resp_multiple’);
$index = new XMLDBIndex(‘response_question’);
$index->setAttributes(XMLDB_INDEX_NOTUNIQUE, array(‘response_id’, ‘question_id’, ‘choice_id’));
//为table添加一个index named “response_question”

$result = $result && add_index($table, $index);
}
return $result;
}
?>
上面的代码中:
· XMLDBTable, XMLDBField and XMLDBIndex都是来自XMLDB libraries (contained in /lib/xmldb/*)。XMLDB libraries包含了各种classes用来定义all aspects of the databases and data tables。如table, field, index等
· change_field_notnull and add_index函数是来自DDLIB (DD stands for Data Definition) library (contained in /lib/ddllib.php)。DDLIB包含了以XMLDB定义的class objects作为参数来对db table进行修改的函数
    注意:对于哪些不属于任何plugin的db tables,如果我们要修改它们应该怎么办?
    那就要在moodle_home下的local目录里创建一个db目录,然后在通过和plugin db talbe类似的方法来执行。
    不过有一个很大的不同之处在于:不需要install.xml,只需要upgrade.php。所有的db操作都写在upgrade.php里。同时,在”local”目录下,还要有一个version.php file来定义the version information for the upgrade scripts。例如:
<?php
$local_version = 2009081600;
?>

在local/db/upgrade.php里必须定义xmldb_local_upgrade函数
四、XMLDB Editor Tool
    这是一个很有用的工具,它在Administration Block > Miscellaneous > XMLDB Editor。它用来create and manage用在install.xml里的XML code
你可以用它来:
•创建新XMLDB文件和编辑现有的XMLDB文件
•在你的已经存在的数据表中创建的XML
•检查是否有任何XML错误(如果发生手动创建)
•你还可以通过已存在的XML文件来生成您正在使用的数据库类型,您需要执行的SQL。如果您正在开发数据表,并希望这些快速创建,这是非常方便的。
•通过使用XMLDB和DDLIB功能产生适合upgrade.php文件的PHP代码

作者: admin

为您推荐

联系我们

联系我们

邮箱:

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部