문제

나는 프로젝트를 위해 교리의 dbal 부분만을 사용하고 있습니다. 그래서 나는 자신을 매핑하는 것을 돌봐야합니다. 나는 여기에서 읽을 수 있듯이 Doctrin은 데이터베이스 유형을 일반적인 PHP 유형으로 다시 매핑한다는 것을 알아 냈습니다. [1].

이제 DOCTRINE이 DB TYPE TINYINT (4)를 부울로 맵핑한다는 사실을 발견했습니다. MySQL 매뉴얼에 따르면 TinyInt (1)만이 부울 [2]과 동일합니다. 내 프로젝트는 MySQLI에서 Doctrine로 이동하기를 원하는 레거시 인이므로 기본 DB 유형을 고정시켜야합니다.

내 질문은 현재 Doctrine에서 네이티브 DB 유형을 얻는 방법입니다.

에 대한 사전에 도움을 주셔서 감사합니다.

stefano

[1] http : // docs .doctrine-project.org / projects / doctrine-dbal / en / 최신 / 참조 / types.html [2] http://dev.mysql.com/ DOC / REFMAN / 5.0 / en / numeric-type-overview.html

도움이 되었습니까?

해결책

Doctrine 이슈 트래커에서 보고서를 opend하여 교리가 왜 그렇게 작동 하는지를 알아냅니다.대답은 간단합니다 :

Tinyint의 길이는 저장할 수있는 값의 크기에 대해 아무 것도 말하지 않습니다.어떤 경우 1 바이트에 있지만 필드 에이 옵션을 사용하는 경우에 충전 된 0을 충전하십시오.

교리는 MySQL이 자신의 부울 유형을 제공하지 않기 때문에 자신의 부울 유형을 MySQL Tinyint 유형으로 매핑합니다.

자세한 내용은 티켓에 대한 자세한 내용을 더 읽을 수 있습니다.

"Noofollow"> http://www.doctrine-project.org/jira/browse/DBAL-781

다른 팁

레거시 MySQL DB를 교리에 매핑하는 사람들은 Tinyint (4)

를 다룰 때 놓치기 쉽기 쉽습니다.

TL; DR

필드 맵핑에서 default: '1' 변경

is_active:
    type: boolean
    options:
        default: true
    nullable: true
.

긴 버전

레거시 DB에서 다음 DB 구조가 있었는데, tinyint (4) is_active

CREATE TABLE IF NOT EXISTS `foo_table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
...
  `is_active` tinyint(4) DEFAULT '1',
...
.

다음 명령을 실행 한 후

php app/console doctrine:mapping:import --force AcmeDemoBundle yml
php app/console doctrine:generate:entities AcmeDemoBundle
.

php app/console doctrine:schema:update --dump-sql를 실행하는 동안 나는 diff로 끝났다

ALTER TABLE foo_table CHANGE is_active is_active TINYINT(1) DEFAULT NULL;
.

기존 DB에 대한 수정을 할 수 없었지만 문제는 문제를 해결하지 못했습니다, 나는 여전히이 diff를 얻었습니다.

yml 매핑은 다음 필드 정의

is_active:
    type: boolean
    nullable: true
    default: '1'
    column: is_active
.

로 시도했습니다.
is_active:
    columnDefinition: "TINYINT(4)"
    nullable: true
    default: '1'
    column: is_active
.

성공하지 않고 프로그래밍 "에서 매우 공통된 규칙을 따르십시오."코드에 문제가 없으면 문제가 어딘가에 " 솔루션을 발견했습니다

솔루션

is_active:
    type: boolean
    options:
        default: true
    nullable: true
.

이제는 단순히 type: boolean를 사용하는 경우에도 tinyint (4)를 올바르게 인식합니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top