1

データ定義から mysql テーブルを作成または更新する既存の PHP ライブラリはありますか? たとえば、Silverstripe ではそれが可能です。各モデルはそのデータを定義します。

$db = array(
    'FieldName' => 'Boolean',
    'FieldName2' => 'Text',
);

$has_one = array(
    'RelationName' => 'ObjectType'
);

次の行に沿ってテーブルを生成します

CREATE TABLE classname (Id INT, FieldName BOOLEAN, FieldName2 TEXT, RelationNameId INT)

か何か。列を db 配列に追加すると、データベースに追加されます。新しいテーブルが古いテーブルと互換性がない場合、新しいテーブルが作成され、古いデータが新しいテーブルにインポートされます。あらゆる種類のインデックスやものも確実に処理します。

これを行うスタンドアロンの PHP ライブラリはありますか? このプロジェクトに Silverstripe を使用したくありません。

私の最終的な目標は、テーブル識別子といくつかの入力フィールドを含む HTML でフォームを作成し、送信されるすべてのデータのデータ型を持つテーブルを作成するコントローラーに送信できるようにすることです。フォームにフィールドを追加する場合、コントローラーで対応するテーブルを更新する必要があります。

データ型の配列から CREATE TABLE ステートメントをコーディングする方法を提案しないでください。これは、私が必要としているものの始まりにすぎません。また、PHP でデータ型の配列を変更して既存のテーブルを更新できるようにする必要もあります。これは、単純に CREATE TABLE を作成するよりもはるかに困難です。

4

2 に答える 2

0

これは、私がどのように行うかの非常に簡単な例です (もちろん、これは非常に基本的なものです) が、関数にこれを .sql ファイルなどに保存させることができます。言った通り、今のままでは使わないので、性能等は分かりませんでした。

<?php

define ('INTEGER', 'INT'); // may use constants etc.

function createTable($name, $fields)
{
    $format = 'CREATE TABLE %s (%s)';

    foreach ($fields as $field)
    {
        $buffer[] = $field[0] . ' ' . $field[1];
    }

    $buffer = implode('; ', $buffer); // need to seperate list with a char different to comma
    $result = sprintf($format, $name, $buffer); // else it would be another argument for sprintf
    $result = str_replace(';', ',', $result); // replace the char with a comma

    print_r($result);
    return $result;
}

$name = 'mytable';
$data = array(
    array ('field 1', 'INT'),
    array ('field 2', 'VARCHAR (30)'),
    array ('foo', 'BAR'),
    array ('foo', INTEGER)
);

createTable($name, $data);

?>

出力:CREATE TABLE mytable (field 1 INT, field 2 VARCHAR (30), foo BAR, foo INT)

于 2012-10-19T10:24:31.880 に答える
0

Doctrine2は進むべき道のように見えます...

http://docs.doctrine-project.org/en/latest/reference/tools.htmlでは、PHP 内で SchemaTool を使用する方法について説明しています。http : //docs.doctrine-project.org/en/2.1/reference/php -mapping.htmlは、SchemaTool が使用する ClassMetadata オブジェクトを作成する方法を設定します。

エンティティを動的に作成し、それらを EntityManager に追加し、テーブルを作成するだけでこれを行う方法を知りたいのですが、これは Doctrine チームが念頭に置いていたものではないと思うので、私は持っていると思います多くのことを自分で行うことです。妥協案として、私は次のアプローチに従いました: https://groups.google.com/forum/#!msg/doctrine-user/FRnvpHN7nFg/_JVDv61esfYJ

YML ファイルを動的に作成し (私のデータ型はすべて単純なので、これはそれほど難しくありません)、YML からエンティティを作成してから、スキーマ ツールを実行する方法のように思えます。しかし、私はこれに戻らなければなりません.プロジェクトのために、今のところ手動でデータベースを作成します.

于 2012-10-19T10:07:23.897 に答える