2

モデルクラスでのクエリを簡素化するのに役立つクラス(データマップ)を作成しています。基本的に、このクラス(Datamap)は私のdbクラスと組み合わせて使用​​されます。

以前は、モデルの挿入ステートメントに必要です。

$db->query("INSERT INTO test(id,name) VALUES("id","name")");

これで、Datamapクラスを使用すると、次のようになります。

$datamap->create("test","id=id&name=name");

以下は、私が作成したDatamapクラスのスニペットコードです。

    function create($tablename,$variables){
    $id=0;
    $tbl = $this->creturnval($variables);
    $tblVal = $tbl[0];
    $tblData = $tbl[1];
    $this->db->execute("INSERT into $tablename($tblVal) VALUES($tblData);");
    $id = $this->db->lastInsertedId();
    return $id;
}


function creturnval($variables){
    $vars = explode("&",$variables);
    $count = sizeOf($vars);
    $tblVal = "";
    $tblData = "";
    for($i=0;$i<$count;$i++){
        $d = explode("=",$vars[$i]);
        $tblVal.= $d[0].",";
        $tblData.= "'".$d[1]."'".",";
    }
    $tblVal = rtrim($tblVal, ',');
    $tblData = rtrim($tblData, ',');
    $return[0] = $tblVal;
    $return[1] = $tblData;
    return $return;
}

私の懸念は、実際にはパフォーマンスの問題です。以前のモデルクラスでは、を使用しただけの場合$db->query()、2つの関数を実行する必要がないため、高速になっているようです。

ここで、挿入を行うには、変数を解析し、分割するなどして、処理する必要があります。

このDatamapクラスを使用するという私の考えは、実際には、より多くの保守性と標準化を提供することです。これは、すべてのモデルクラスが乱雑に見える場所にSQLステートメントを持たないようにするためです。

これにより、パフォーマンスの問題が発生する可能性があると思いますか?

PS:Webアプリケーション用に構築した独自のフレームワークを使用しています

すべてのアドバイスに感謝します。

4

2 に答える 2

2

SQLラッパーを作成するより一般的な方法は次のようになります。

$item = $datamap->create("test");
$item->setValue("id", $id);
$item->setvalue("name", $name);
$item->update(); // push to database

$datamap->create();レコードの値を保持するオブジェクトを返します。setValueそれにgetValueアクセスできるようにします。update新しい値をデータベースにプッシュします。同様に、フェッチするレコードのIDが$datamap->get("test", 1234);どこにあるかを実装できます。同じ関数で、と同じオブジェクトを返します。その後、の代わりに発生します。を使用してレコードを挿入した後、を使用してIDをフェッチし、オブジェクトに設定して、その時点以降に実行できるようにすることができます。(オブジェクトはその「状態」を追跡する必要があります)。1234getcreateupdateUPDATEINSERTupdatemysql_last_insert_id()UPDATE

于 2012-07-10T23:15:00.560 に答える
0

検索したところ、Zend_dbを使用した方がよいことがわかりました。それを使用します。

于 2012-07-11T04:38:53.243 に答える