2

私は現在、silex、propel、twig を使用してモジュラー サイトを開発しています。「コア」プロジェクトに基づいて新しいプロジェクトを簡単に作成できるように、その上にインストーラー プロジェクトを作成するつもりです。

データベースには、schema.xml でisCrossRef属性を必要とする多対多テーブルがあります。私の MySql データベースをリバースエンジニアリングするとき、Propel はどのテーブルが crossRef であるかを判断できません。それはわかりましたが、schema.xml の生成を変更できるかどうか疑問に思っていました。

この isCrossRef 属性を必要とするテーブルにコメントを追加すると、Propel ソースコードのどこでこのコメントを読み、必要な IsCrossRef を生成された schema.xml に追加できるでしょうか?

4

1 に答える 1

2

ソースコードのいくつかを読んだ後、私は自分で答えを見つけました:

これを実現したい場合は、次のファイルを変更する必要があります: MysqlSchemaParser.php、場所: propel1/generator/lib/reverse/mysql (composer とともにインストールされている場合)

99 行目のレコードセットを次のように変更します。

while ($row = $stmt->fetch(PDO::FETCH_NUM)) {
    $name = $row[0];
    $type = $row[1];

    if ($name == $this->getMigrationTable() || $type != "BASE TABLE") {
        continue;
    }
    /*
        Edit : Find out if table isCrossRef 
    */
    $commentStmt = $this->dbh->query("show table status like '".$name."'");
    $commentRow  = $commentStmt->fetch(PDO::FETCH_OBJ);
    $isCrossRef = (strtolower($commentRow->Comment) == 'iscrossref');
    /*
        End of edit
    */

    if ($task) {
        $task->log("  Adding table '" . $name . "'", Project::MSG_VERBOSE);
    }

    $table = new Table($name);
    $table->setIdMethod($database->getDefaultIdMethod());
    $table->setIsCrossRef($isCrossRef); /*EDIT : set is crossref to true*/
    $database->addTable($table);
    $tables[] = $table;
}
于 2013-07-05T13:05:03.830 に答える