IT박스

symfony2 및 doctrine을 사용하여 기존 데이터베이스에서 단일 엔티티 생성

itboxs 2020. 12. 14. 08:00
반응형

symfony2 및 doctrine을 사용하여 기존 데이터베이스에서 단일 엔티티 생성


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, 주석)은 어디에 있습니까?

그리고 마지막으로

php app/console doctrine:generate:entities AppMyBundle --no-backup

이 교리는 필요한 엔티티 만로드합니다. CamelCase를 사용해야하는 필터에주의하십시오!

이것이 당신을 도울 수 있기를 바랍니다


세 번째 명령의 경우 교리는 모든 엔티티 파일을 계속 재생성했습니다. 번들 뒤에 엔티티 이름을 추가하여 내가 관심있는 엔티티 만 생성했습니다.

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"

( 참고 : 데이터베이스 이름이 인 경우 테이블 이름을 찾으려면 doctrine을 my_meeting위해 MyMeetingin 으로 변경해야합니다 filter="MyMeeting". 이는 doctrine이 항상 밑줄을 제거하고 테이블 이름에 Camel-case를 추가하기 때문입니다. 그렇지 않으면이 오류가 발생합니다. : "데이터베이스에 매핑 정보가 없습니다 . " .)

$ 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;

추가하지 않으면.)

어디:

  • AppBundle은 Symfony 2.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 doctrine orm db 파일을 삭제해야합니다. 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).*$/');

source: https://coderwall.com/p/jofhdw/doctrine-tell-which-tables-to-work-with

I was having issues when running the following command because of large number of badly defined legacy tables

php ./vendor/bin/doctrine orm:convert-mapping --force --from-database annotation ./src/UI/Entity/

It turns out that the --filter flag only filters AFTER it has read meta data from all of your tables which, if they don't have primary keys or have some other issue, will cause the command to fail


None of the answers were quite right for me using Symfony 3. I ended up doing:

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

I would have left this as a comment to the accepted answer but I'm a newbie.

For those like me who had trouble with the --filter switch mapping multiple tables with coincident strings in names, one can use a pattern.

Example table names:

Vendor VendorContact

php app/console doctrine:mapping:convert metadata_format \
    ./src/App/MyBundle/Resources/config/doctrine \
    --from-database \
    --filter="Vendor"

That command will convert both tables rather than just Vendor. If you want just Vendor and not VendorContact, use a pattern in --filter:

php app/console doctrine:mapping:convert metadata_format \
    ./src/App/MyBundle/Resources/config/doctrine \
    --from-database \
    --filter="\bVendor\b"

Hope that helps someone!


Works great with Symfony 3 too.

If you are getting "No Metadata Classes to process." message try convert your tablename to Doctrine camel casing in the filter parameter.

"my_table_name" needs to be write as "MyTableName".


I had exactly the same issue with Symfony 2.4 and MySQL.

None of the workarounds posted above worked for me.

I ended up creating a new database with the tables I want to extract (this can be easy to do because MySQL provides the creation script).

Then changed the connection to that new database and executed the entity extraction command from there.

Seems to be a bit radical, but I will not create the entities by hand.

Hope that helps


Didn't work any of these for my symfony 3.3. So I just created a copy of directory and re-generated all of the entities in copy directory. Then I copied required entities in my original directory.

--filter does not work due to this issue https://github.com/symfony/symfony/issues/7717


for Symfony 3

To generate the entities for a new "Group" table

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

enter image description here

as written in the symfony 3 documentation

참고URL : https://stackoverflow.com/questions/10371600/generating-a-single-entity-from-existing-database-using-symfony2-and-doctrine

반응형