0

プロジェクトがブラウザーで初めて開かれたときに、symfony2 プロジェクトに必要なテーブルとデータを作成したいと考えています。

メインのエントリ ポイントである loginAction があります。このアクションでは、CREATE TABLE IF NOT EXISTS `blob` .. などのようなことをしたいと考えています。

私の言っていることが分かるよね?これは可能ですか?インターネット上で何も見つかりませんでした。

私は試した

    $em = $this->getDoctrine()->getManager();
    $query = $em->createQuery(
      "CREATE TABLE IF NOT EXISTS `role` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `name` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
        `role` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
        PRIMARY KEY (`id`),
        UNIQUE KEY `UNIQ_57698A6A57698A6A` (`role`)
      ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

      /*!40000 ALTER TABLE `role` DISABLE KEYS */;
      INSERT INTO `role` (`id`, `name`, `role`) VALUES
        (1, 'admin', 'ROLE_ADMIN'),
        (2, 'station', 'ROLE_STATION');
      /*!40000 ALTER TABLE `role` ENABLE KEYS */"
    );

    $products = $query->getResult();

しかし、それは私に言う だから、私が試した方法では不可能だと思われます。

あなたが私を助けることができればうれしいです:)

4

2 に答える 2

2

この種のプロジェクトが本番目的である場合、テーブルの作成/コントローラからのフィクスチャのロードを使用することは強くお勧めしません (または、プロジェクトが展開された後はいつでもコンソールから)。

次のようなものを考慮する必要があります。

  • につながるインストールメカニズム:
    • データベース スキーマの作成
    • 備品の読み込み

簡単に説明すると、SF2 にはエンティティに応じてデータ モデルを作成/変更できるコンソール コマンドがいくつかあります。したがって、自分でスキーマを「作成」または「更新」することは想定されていませんが、このために設計されたコマンド、別名を使用してください。

app/console doctrine:schema:update --force

--forceオプションは、コマンドにテーブルを強制的に変更させるためのものです。列 (エンティティ プロパティ) を削除してもデータは保存されないことに注意してください。これが、運用環境であまり推奨されない理由の 1 つです。

この件については、SF2 の公式ドキュメントを参照してください。

次に、「ベース」データをロードすることを「フィクスチャのロード」と呼びます。公式ドキュメントも参照して、自分で使用するのに役立てることができます。

EDIT : すでにこれらすべてを認識しているため、コントローラーから両方のコマンドを呼び出すことを検討する必要があります (schema:update と Fixtures:load)。

ただし、この件に関するドキュメントはあまりありません。コントローラーからアプリケーションを取得して、ドキュメントのようにコマンドを呼び出すことができるため、コントローラーから動作するはずのドキュメントでこの例を見ることができます。

お役に立てれば :)

于 2013-11-05T08:59:53.520 に答える