必要なもの:
以下のものを置き換える効率的な SQL スクリプト ビルダー。
背景。
非常に単純なプログラムですが、それを作成するためのより効率的な方法が必要です。このコードを使用している理由は、他の開発者が自分のプラットフォームとデータベース テーブルで「モジュール」を作成できるようにする必要があるためですが、フル アクセスをブロックしています。コア データベースに対しては、$api->database-> アクセス レイヤーを使用してテーブル/データにアクセスする必要があります。プログラムのコア部分へのリクエストをブロックします。
以下は、関数を使用して SQL テーブル作成スクリプトを作成する方法です。SqlField クラス/関数は、渡された値のフラットな配列を返すだけで、特別なことは何もありません。
//The structure of the params are..
//$fields[] = SqlField::create($f_name, $f_type, $null, $auto_inc, $is_pk, $is_unique);
$fields[] = SqlField::create('id', 'int(7)', 0, 1, 1, 1);
$sql = $sqlTable->createTable('MyTableName', $fields );
以下は、私がすぐに書いた現在の関数ですが、すぐに面倒になり、完全ではありません。
public function createTable($tableName, $fields = array()) {
$sql="CREATE TABLE xmod_".$tableName." ( \r\n";
$isinit = true;
foreach($fields as $field) {
$sql .= ($isinit)? "" : ", \r\n" ;
$isinit = false;
$sql .= "".$field[0]." ".$field[1]." ";
if($field[2] == true) {
$sql .= "NOT NULL ";
}
if($field[3] == true) {
$sql .= "auto_increment ";
}
}
$isinit = true;
//Work on the primary keys
foreach($fields as $field) {
if($field[4] == 1) {
$sql .= ($isinit)? "" : ", \r\n" ;
$isinit = false;
$sql .= "PRIMARY KEY (".$field[0].")";
}
}
$isinit = true;
//Work on the unique fields
foreach($fields as $field) {
if($field[5] == 1) {
$sql .= ($isinit)? "" : ", \r\n" ;
$isinit = false;
$sql .= "UNIQUE id (".$field[0].")";
}
}
$sql .= "\r\n )";
return $sql;
}