64

Symfony2コンソールツールを使用してデータベースから単一のエンティティを生成することは可能ですか?

コーディングの途中でテーブルを追加する必要があり、既存のエンティティクラスに変更が加えられました。したがって、すべてのエンティティを再生成したくありません。

任意の提案をいただければ幸いです!

4

11 に答える 11

108

私は同じ問題を抱えていました、あなたはこのようにしなければなりません:

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

この教義のように、あなたが必要とする実体だけをロードします。キャメルケースを使用する必要があるフィルターに注意してください!

これがお役に立てば幸いです

于 2012-05-16T08:34:25.513 に答える
29

3番目のコマンドでは、doctrineはすべてのエンティティファイルを再生成し続けました。バンドルの後にエンティティ名を追加することで、関心のあるエンティティのみが生成されました。

php app/console doctrine:generate:entities AppMyBundle:Yourtablename --no-backup
于 2012-11-02T21:05:36.653 に答える
14

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が常にアンダースコアを削除し、テーブル名にキャメルケースを追加するためです。そうでない場合、このエラーが発生します。 :「データベースにはマッピング情報がありません」。)MyMeetingfilter="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;

追加しない場合。)

どこ:

  • AppBundleは、まさにSymfony2.7の「AppBundle」です。
  • ミーティングはターゲットテーブルです(キャメルケースセンシティブ)

念のため、次のディレクトリを確認してください。

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をお読みください。

于 2015-08-14T05:46:03.013 に答える
9

現在非表示になっている@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フラグは、すべてのテーブルからメタデータを読み取った後でのみフィルタリングすることがわかります。これらのテーブルに主キーがない場合やその他の問題がある場合は、コマンドが失敗します。

于 2015-02-18T10:12:39.637 に答える
6

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
于 2017-03-12T04:42:07.710 に答える
3

私はこれを受け入れられた答えへのコメントとして残したでしょうが、私は初心者です。

--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"

それが誰かを助けることを願っています!

于 2015-12-19T05:00:28.420 に答える
3

Symfony3でもうまく機能します。

「処理するメタデータクラスがありません」というメッセージが表示された場合。メッセージは、フィルターパラメーターでテーブル名をDoctrineキャメルケースに変換してみてください。

「my_table_name」は「MyTableName」と記述する必要があります。

于 2017-03-29T16:48:03.003 に答える
3

--filterは、テーブル名ではなくエンティティ名で機能します!php bin / console doctrine:mapping:import "App\Entity"アノテーション--path=config / doctrine --filter = "YourEntity"

于 2020-04-28T10:05:55.723 に答える
2

Symfony3の場合

新しい「グループ」テーブルのエンティティを生成するには

php bin/console doctrine:mapping:import "App\Entity" annotation --path=src/AppBundle/Entity --filter Group

ここに画像の説明を入力してください

symfony3のドキュメントに書かれているように

于 2019-07-05T12:24:40.947 に答える
1

私はSymfony2.4とMySQLでまったく同じ問題を抱えていました。

上記の回避策はどれも私には効果がありませんでした。

抽出したいテーブルを使用して新しいデータベースを作成することになりました(MySQLが作成スクリプトを提供しているため、これは簡単に実行できます)。

次に、その新しいデータベースへの接続を変更し、そこからエンティティ抽出コマンドを実行しました。

少し過激なようですが、手作業でエンティティを作成することはしません。

お役に立てば幸い

于 2015-10-30T13:39:54.977 に答える
0

私のsymfony3.3ではこれらのどれも動作しませんでした。そのため、ディレクトリのコピーを作成し、コピーディレクトリ内のすべてのエンティティを再生成しました。次に、必要なエンティティを元のディレクトリにコピーしました。

--この問題が原因でフィルターが機能しないhttps://github.com/symfony/symfony/issues/7717

于 2017-08-23T05:09:03.580 に答える