sql >> データベース >  >> RDS >> Mysql

Doctrineconvert-mappingを実行するときにテーブルをスキップする

    Doctrineの変換と検証の主な問題は、エンティティまたはマッピングが存在するかどうかに関係なく、デフォルトでデータベース全体とすべてのテーブルを読み取ることです。 --filter=""を使用する場合でも orm:convert:mappingを呼び出すときのフラグ またはorm:generate:entities

    この問題を回避し、例外をスローするテーブルをDoctrineにスキップさせるには、setFilterSchemaAssetsExpressionで定義することにより、必要なテーブルのみを読み取るようにDoctrineを設定できます。

    $isDev = true;
    
    $config = \Doctrine\ORM\Tools\Setup::createAnnotationMetadataConfiguration(array('/path/to/entities'), $isDev);
    $config->setFilterSchemaAssetsExpression('/^(table1|table2|prefixed_.*|.*_suffixed)$/');
    
    $em =  \Doctrine\ORM\EntityManager::create(array(
        'driver' => 'db_driver',
        'host' => 'localhost',
        'user' => 'user_name',
        'password' => 'user_password',
        'dbname' => 'database',
    ), $config);
    

    または、既存のエンティティマネージャーの接続にフィルターを設定できます。

    $em->getConnection()->setFilterSchemaAssetsExpression('/^(filtered_table)$/');
    

    参照: http://doctrine-orm.readthedocs.org/en /latest/reference/configuration.html

    確かに、これは例外を無視するようにDoctrineに指示する方法ではありませんが、データベース全体ではなく、特定のテーブルで既存のアプリケーションの学習を開始するのに役立つはずです。

    リンクテーブルがあると述べたので、補足として、フィルターに含めないテーブルに外部キーがある場合でも、-from-database変換によってその参照が作成されます。手動で変更する必要があります。 OneToMany、ManyToOne、ManyToManyの関連するマッピングではなく、生の形式へのマッピング。

    doctrine orm:convert:mapping --from-database annotation /path/to/entitiesからのアノテーションマッピング

    /**
     * @ORM\Entity
     * @ORM\Table(name="order")
     */
    class Order
    {
      /** 
       * @var \Customer
       * @ORM\ManyToOne(targetEntity="Customer")
       * @ORM\JoinColumns({
       *   @ORM\JoinColumn(name="customer", referencedColumnName="id", nullable=true)
       * })
       */
       private customer;
    }
    

    宛先

    /**
     * @ORM\Entity
     * @ORM\Table(name="order")
     */
    class Order
    {
      /** 
       * @var integer
       * @ORM\Column(name="customer", type="integer", nullable=true)
       */
       private customer;
    }
    

    次に、doctrine orm:validate-schemaを使用することを忘れないでください マッピングが同期していることを確認します。



    1. テキストとキーワードのリストの間の親和性?

    2. NHibernateでGuidをId列として使用すると、MySQLを使用するときにフォーマット例外が発生します

    3. 照合の不正な組み合わせMySQLエラー

    4. SalesforceおよびOneLoginシングルサインオン(SSO)でのODBCの使用