Symfony2コンソールツールを使用してデータベースから単一のエンティティを生成することは可能ですか?
コーディングの途中でテーブルを追加する必要があり、既存のエンティティクラスに変更が加えられました。したがって、すべてのエンティティを再生成する必要はありません。
提案は大歓迎です!
私は同じ問題を抱えていました、あなたはこのようにしなければなりません:
php app/console doctrine:mapping:convert metadata_format \
./src/App/MyBundle/Resources/config/doctrine \
--from-database \
--filter="Yourtablename"
それから
php app/console doctrine:mapping:import AppMyBundle \
metadata_format --filter="Yourtablename"
どこ metadata_format
は、生成するファイルの末尾です(例:xml、yml、annotation)
そして最後に
php app/console doctrine:generate:entities AppMyBundle --no-backup
このようにdoctrineは必要なエンティティのみをロードします。CamelCaseを使用する必要があるフィルターに注意してください!
これがあなたを助けることを願っています
3番目のコマンドでは、doctrine=すべてのEntityファイルを再生成し続けました。バンドルの後にエンティティ名を追加することで、興味のあるエンティティのみが生成されました。
php app/console doctrine:generate:entities AppMyBundle:Yourtablename --no-backup
Symfony 2.7オプションアノテーションおよび[/ xml/yml]のシンプルな作業ソリューション http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html を参照
3つのステップで3つのコマンドを実行します。
$ php app/console doctrine:mapping:import --force AppBundle xml --filter="Meeting"
(注:データベース名がmy_meeting
の場合、doctrineの場合、filter="MyMeeting"
でMyMeeting
に変更する必要がありますこれはdoctrineは常にアンダースコアを取り除き、キャメルケースをテーブル名に追加するためです。そうでない場合、このエラーが表示されます: "データベースにはマッピング情報がありません」。
$ php app/console doctrine:mapping:convert annotation ./src/AppBundle/Entity --from-database --filter="Meeting"
(注:次のようなnamespace AppBundle\Entity;
がMeeting.phpクラスファイルにあることを確認してください:
<?php
/**
* Created by PhpStorm.
* User:
* Date: 03-Sep-2015
* Time: 3:23 PM
*/
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
追加しない場合。)
どこ:
念のため、このディレクトリを確認してください。
src\AppBundle/Resources/config/doctrine/Meeting.orm.xml
そして、エンティティクラスファイルを作成するテーブルの.xmlファイルのみがあり、他のファイルはないことを確認します。次に、以下のコマンドを実行して、以前に作成したエンティティクラスのgetおよびsetメソッドを生成します
$ php app/console doctrine:generate:entities AppBundle:Meeting --no-backup
注2:最後のステップとして、例えばsrc\AppBundle/Resources/config/doctrine/VisitorData.orm.xml
のxml doctrine orm dbファイルを削除する必要があります
それは私にとって非常にうまくいきます。
説明については、以下をお読みください: http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html
現在隠されている@fyryeのコメントは信用に値するため、他の人が見逃さないようにこれを追加したかった。これがアプローチです:
/** @var \Doctrine\DBAL\Connection $connection */
$config = $connection->getConfiguration();
// for excluding an specific table
$config->setFilterSchemaAssetsExpression('/^(table_to_reverse_engineer_1|table_to_reverse_engineer_2).*$/');
ソース: https://coderwall.com/p/jofhdw/doctrine-tell-which-tables-to-work-with
多数の不適切に定義されたレガシーテーブルが原因で、次のコマンドを実行すると問題が発生しました。
php ./vendor/bin/doctrine orm:convert-mapping --force --from-database annotation ./src/UI/Entity/
--filterフラグは、すべてのテーブルからメタデータを読み取った後にのみフィルタリングするため、主キーがない場合やその他の問題がある場合はコマンドが失敗することがわかります
Symfonyを使用して、答えはどれも私にはぴったりではありませんでした。私はやったこと:
php bin/console doctrine:mapping:import --force MyBundle xml --filter="MyTable"
php bin/console doctrine:mapping:convert annotation ./src --filter="MyTable"
php bin/console doctrine:generate:entities MyBundle:MyTable --path ./src
Symfony 3でもうまく機能します。
「処理するメタデータクラスがありません」と表示される場合。メッセージは、テーブル名をDoctrineフィルタパラメータのキャメルケースに変換してください。
「my_table_name」は「MyTableName」として記述する必要があります。
私はこれを受け入れられた答えへのコメントとして残したでしょうが、私は初心者です。
名前に一致する文字列が含まれる複数のテーブルをマッピングする--filterスイッチで問題が発生した私のような人には、パターンを使用できます。
テーブル名の例:
ベンダーベンダー連絡先
php app/console doctrine:mapping:convert metadata_format \
./src/App/MyBundle/Resources/config/doctrine \
--from-database \
--filter="Vendor"
このコマンドは、ベンダーだけでなく両方のテーブルを変換します。 VendorContactではなくVendorのみが必要な場合は、-filterでパターンを使用します。
php app/console doctrine:mapping:convert metadata_format \
./src/App/MyBundle/Resources/config/doctrine \
--from-database \
--filter="\bVendor\b"
それが誰かを助けることを願っています!
Symfony 2.4とMySQLでもまったく同じ問題がありました。
上記の回避策はどれも役に立たなかった。
抽出したいテーブルで新しいデータベースを作成することになりました(MySQLには作成スクリプトが用意されているため、これは簡単です)。
次に、その新しいデータベースへの接続を変更し、そこからエンティティ抽出コマンドを実行しました。
少し過激なようですが、私は手でエンティティを作成しません。
役立つことを願っています
forSymfony 3
新しい「グループ」テーブルのエンティティを生成するには
php bin/console doctrine:mapping:import "App\Entity" annotation --path=src/AppBundle/Entity --filter Group
symfony 3ドキュメント に書かれているように
私のsymfony 3.3ではこれらのいずれも機能しませんでした。したがって、ディレクトリのコピーを作成し、コピーディレクトリ内のすべてのエンティティを再生成しました。次に、必要なエンティティを元のディレクトリにコピーしました。
-この問題のため、フィルターは機能しません https://github.com/symfony/symfony/issues/7717