データ定義API

移動先: 案内, 検索

Moodle 2.0


あなたはこのページでMoodleがデータベース構造 (テーブル、フィールド、インデックス等) を処理するために利用可能な関数に接します。

関数の目的はすべてのデータベース構造(DDL文)を扱える明確に定義された関数群を1つの中立的な記述で持つことにより、RDBMSが要求する正しいSQL文を実行できるようにすることです。これらすべての関数はインストールおよびアップグレード処理にのみ使用されます。

あなたはこのページで説明、裏技および使用説明を含む関数等の完全な一覧を閲覧できます。もし、興味をお持ちでしたら、DBデータ処理 (選択、更新、削除等のDML文) のすべてが説明されているDML関数ページをご覧ください。

もちろん、このドキュメントの内容の明確化、作成および情報の追加等、ご自由に編集してください。心より歓迎致します!

主要情報

重要なメモ: このページに記載されるすべての関数は私たちが新しい機能をサポートするために変更した「Moodle 2.0以降」のDBレイヤで使用されます。Moodleの以前のバージョンの情報が必要な場合、 DDL関数 - 2.0以前ページをご覧ください。変更点の詳細は移行ドキュメントをご覧ください。

  • このページでコールされる関数すべては$DBグローバルオブジェクトからアクセス可能な「データベースマネージャ」のパブリックメソッドです。そのため、以下のように「upgrade.php」のメイン関数に「インポート」する必要があります:
function xmldb_xxxx_upgrade {
 
    global $DB;
 
    $dbman = $DB->get_manager(); // ddlマネージャおよびxmldbクラスを読み込みます。
 
    /// ここにあなたのアップグレードコードを記述します。
}
  • 再度、これら関数の使用はアップグレード処理のみに「制限」してください。そして、ここ以外では使用されないようにすべきです。
  • すべての「$table, $field, $index」パラメータは常にXMLDオブジェクトです。これらの関数を試す前に新しいDDL関数の作成に関する完全なドキュメントを忘れずにご覧ください。そこでは1つの例および以下に詳述されているすべての関数の使用に関する実用的なトリックが説明されています。
  • あなたがこれらの関数の実際の使用を必要とする場合、1.7リリース以降のアップグレードを担当する「upgrade.php」スクリプトをお試しください。
  • また、必要なPHPコードを自動生成する目的でのXMLDBエディタの使用は本当に素晴らしいアイデアです (強くお勧めします!)。

関数

テーブル処理

/// テーブルの存在を検知するため:
    $dbman->table_exists($table)
 
/// テーブルを作成するため:
    $dbman->create_table($table, $continue=true, $feedback=true)
 
/// テーブルを削除するため:
    $dbman->drop_table($table, $continue=true, $feedback=true)
 
/// テーブルをリネームするため:
    $dbman->rename_table($table, $newname, $continue=true, $feedback=true)

フィールド処理

/// フィールドの存在を検出するため:
    $dbman->field_exists($table, $field)
 
/// フィールドを作成するため:
    $dbman->add_field($table, $field, $continue=true, $feedback=true)
 
/// フィールドを削除するため:
    $dbman->drop_field($table, $field, $continue=true, $feedback=true)
 
/// フィールドタイプを変更するため:
    $dbman->change_field_type($table, $field, $continue=true, $feedback=true)
 
/// フィールドの精度を変更するため:
    $dbman->change_field_precision($table, $field, $continue=true, $feedback=true)
 
/// フィールドの符号付き/符号なしステータスを変更するため:
    $dbman->change_field_unsigned($table, $field, $continue=true, $feedback=true)
 
/// フィールドをNULL可またはNULL不可にするため:
    $dbman->change_field_notnull($table, $field, $continue=true, $feedback=true)
 
/// フィールドからenum (列挙型) を削除して制約を確認するため:
/// (この関数はMoodle 2.0で必要なため、Moodle 2.0のみで利用できる点に留意してください。 Moodle 2.1で除外されます。)
    $dbman->drop_enum_from_field($table, $field, $continue=true, $feedback=true)
 
/// フィールドのデフォルト値を変えるため:
    $dbman->change_field_default($table, $field, $continue=true, $feedback=true)
 
/// フィールドをリネームするため:
    $dbman->rename_field($table, $field, $newname, $continue=true, $feedback=true)

インデックス処理

/// インデックスの存在を検知するため:
    $dbman->index_exists($table, $index)
 
/// DBのインデックス名を返すため:
    $dbman->find_index_name($table, $index)
 
/// インデックスを追加するため:
    $dbman->add_index($table, $index, $continue=true, $feedback=true)
 
/// インデックスを削除するため:
    $dbman->drop_index($table, $index, $continue=true, $feedback=true)

考慮すべき点

  1. すべての$table、$field、$indexパラメータは常にXMLDBオブジェクトです。
  2. すべての$newtablename、$newfieldnameパラメータは常に単純文字列です。
  3. 関数実行時のすべてのトラブルは1つの例外に投げられた上でアップグレードプロセスが中止されます。
  4. 自動的にPHPコードを生成する場合、XMLDBエディタの使用をお勧めします。(did I say this before? :-P )

関連情報