0

必要なもの:

以下のものを置き換える効率的な 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;



}
4

1 に答える 1

1

自分で試したことはありませんが、CodeIgniterは似たようなものを提供します。http://codeigniter.com/user_guide/database/forge.html

(コメントからコピー)

于 2012-05-03T08:42:58.967 に答える