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
この教義のように、あなたが必要とする実体だけをロードします。キャメルケースを使用する必要があるフィルターに注意してください!
これがお役に立てば幸いです
3番目のコマンドでは、doctrineはすべてのエンティティファイルを再生成し続けました。バンドルの後にエンティティ名を追加することで、関心のあるエンティティのみが生成されました。
php app/console doctrine:generate:entities AppMyBundle:Yourtablename --no-backup
Symfony2.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"
(注:データベース名がである場合、doctrineがテーブル名を見つけるには、データベース名をinmy_meeting
に変更する必要があります。これは、doctrineが常にアンダースコアを削除し、テーブル名にキャメルケースを追加するためです。そうでない場合、このエラーが発生します。 :「データベースにはマッピング情報がありません」。)MyMeeting
filter="MyMeeting"
$ php app/console doctrine:mapping:convert annotation ./src/AppBundle/Entity --from-database --filter="Meeting"
(注:Meeting.phpクラスファイルに次のようになっていることを確認namespace AppBundle\Entity;
してください。
<?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:最後のステップとして、たとえば次のxml doctrineormdbファイルを削除する必要があります。src\AppBundle/Resources/config/doctrine/VisitorData.orm.xml
それは私にとって非常にうまくいきます。
説明については、 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 3を使用している私にとって、答えはどれも正しくありませんでした。私はやった:
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
私はこれを受け入れられた答えへのコメントとして残したでしょうが、私は初心者です。
--filterスイッチが名前に一致する文字列を持つ複数のテーブルをマッピングするのに問題があった私のような人には、パターンを使用できます。
テーブル名の例:
ベンダーVendorContact
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"
それが誰かを助けることを願っています!
Symfony3でもうまく機能します。
「処理するメタデータクラスがありません」というメッセージが表示された場合。メッセージは、フィルターパラメーターでテーブル名をDoctrineキャメルケースに変換してみてください。
「my_table_name」は「MyTableName」と記述する必要があります。
--filterは、テーブル名ではなくエンティティ名で機能します!php bin / console doctrine:mapping:import "App\Entity"アノテーション--path=config / doctrine --filter = "YourEntity"
Symfony3の場合
新しい「グループ」テーブルのエンティティを生成するには
php bin/console doctrine:mapping:import "App\Entity" annotation --path=src/AppBundle/Entity --filter Group
symfony3のドキュメントに書かれているように
私はSymfony2.4とMySQLでまったく同じ問題を抱えていました。
上記の回避策はどれも私には効果がありませんでした。
抽出したいテーブルを使用して新しいデータベースを作成することになりました(MySQLが作成スクリプトを提供しているため、これは簡単に実行できます)。
次に、その新しいデータベースへの接続を変更し、そこからエンティティ抽出コマンドを実行しました。
少し過激なようですが、手作業でエンティティを作成することはしません。
お役に立てば幸い
私のsymfony3.3ではこれらのどれも動作しませんでした。そのため、ディレクトリのコピーを作成し、コピーディレクトリ内のすべてのエンティティを再生成しました。次に、必要なエンティティを元のディレクトリにコピーしました。
--この問題が原因でフィルターが機能しないhttps://github.com/symfony/symfony/issues/7717