programing

symphony2 및 distrine을 사용하여 기존 데이터베이스에서 단일 개체 생성

sourcetip 2023. 9. 9. 23:31
반응형

symphony2 및 distrine을 사용하여 기존 데이터베이스에서 단일 개체 생성

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

이 교리는 필요한 개체만 로드합니다.Camel Case를 사용해야 하는 필터는 주의하시기 바랍니다!

이것이 당신에게 도움이 되기를 바랍니다.

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

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

Simple Working Solution for 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다음으로 변경해야 합니다.MyMeeting인에filter="MyMeeting"교의가 당신의 테이블 이름을 찾도록 하기 위해서입니다.이는 교의가 항상 밑줄을 제거하고 테이블 이름에 Camel-case를 추가하기 때문입니다.그렇지 않으면 "데이터베이스에 매핑 정보가 없습니다"라는 오류가 나타납니다.

$ php app/console doctrine:mapping:convert annotation ./src/AppBundle/Entity --from-database --filter="Meeting"

(참고: 다음 부품을 준비했는지 확인합니다.namespace AppBundle\Entity;귀하의 회의에서 아래와 같이.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"과 정확히 일치합니다.
  • 미팅은 대상 테이블입니다(Camel-Case sensitive).

확인하려면 다음 디렉토리를 확인합니다.

src\AppBundle/Resources/config/docrine/Meeting.orm.xml

그리고 엔티티 클래스 파일을 만들 테이블에 대한 .xml 파일만 있고 다른 파일은 없는지 확인합니다.그런 다음 아래 명령을 실행하여 이전에 만든 엔티티 클래스에 대한 get 및 set 메서드를 생성합니다.

$ php 앱/콘솔 교리:generate:entities AppBundle:미팅 --백업 안 함

: 로 를 을 해야 xml 을 해야 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 스위치로 매핑하는 데 문제가 있었던 저처럼 패턴을 사용할 수 있습니다.

테이블 이름 예제:

공급업체 공급업체 연락처

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 3와도 잘 어울립니다.

"No Metadata Classs to process." 메시지가 나타나면 필터 매개변수에서 테이블 이름을 Deterrine camel casing으로 변환합니다.

"My_table_name"을(를) "MyTableName"으로 써야 합니다.

--filter는 테이블 이름이 아닌 엔티티 이름과 함께 작동합니다! php bin/hp distrine:hp:import "App\Entity" 주석 --path=config/hp --filter="귀하의 사업체"

심포니 3의 경우

새 "그룹" 테이블에 대한 도면요소를 생성하려면 다음과 같이 하십시오.

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

enter image description here

심포니 3 문서에 쓰인 것처럼.

저는 Symfony 2.4와 MySQL에 대해서 정확히 같은 문제가 있었습니다.

위에 올린 해결책 중에 저에게 맞는 것은 없었습니다.

추출하고 싶은 테이블로 새 데이터베이스를 만들었습니다(MySQL에서 생성 스크립트를 제공하므로 이 작업을 쉽게 수행할 수 있습니다).

그런 다음 해당 새 데이터베이스에 대한 연결을 변경하고 개체 추출 명령을 실행했습니다.

좀 과격한 것 같지만, 직접 주체를 만들지는 않겠습니다.

도움이 되기를 바랍니다.

내 심포니 3.3에 이 중 하나도 작동하지 않았습니다.그래서 그냥 디렉토리의 복사본을 만들고 복사본 디렉토리의 모든 엔티티를 다시 생성했습니다.그런 다음 원래 디렉터리에 필요한 개체를 복사했습니다.

--https://github.com/symfony/symfony/issues/7717 이 문제로 인해 필터가 작동하지 않습니다.

2019년부터 예비 공학 기능이 저하되었기 때문에 더 이상 사용하지 않는 것이 좋습니다.대신 Symfony Maker 번들의 make:entity를 사용하는 것이 좋습니다.

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

반응형