Вопрос

Я использую только дбабскую часть доктрины для моего проекта. Так что я должен заботиться о картографии себя. Я выяснил, что доктрина перенаправляет типы баз данных в универсальный тип PHP, который вы можете прочитать здесь [1].

Теперь я наткнулся на напротив того факта, что доктрина отображает тип DB Tinyint (4) до логика. Согласно руководству MySQL только Tinyint (1) эквивалентно логию [2]. Поскольку мой проект является устаревшим, который мне нравится переходить от MySQLI в доктрину, мне нужно придерживаться родных типов БД.

Мой вопрос сейчас, как я получаю родной тип БД из доктрины?

заранее спасибо за вашу помощь.

Стефано

[1] http:// docs . octrine-project.org / Projects / Doctrine-DBal / En / Neighle / Reference / Tymes.html [2] http://dev.mysql.com/ doc / refman / 5.0 / en / numeric-type-overview.html

Это было полезно?

Решение

Я выравниваю отчет в упущенном отчете, чтобы выяснить, почему доктрина работает так.Ответ прост:

Длина тининта ничего не говорит о размере значения, которое может быть сохранено.Это в любом случае 1 байт, но он влияет на заполнение нулей на случай, если вы используете эту опцию для вашего поля.

Доктрина отображает свой собственный булевой тип к типу MySQL Tinyint, потому что MySQL не предоставляет собственный булевой тип.

Для получения дополнительной информации Вы можете прочитать больше на билете:

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

Другие советы

Для тех, кто наносит наследующую MySQL DB к доктрине, я нашел решение для общей проблемы, которая легко пропустить при работе с Tinyint (4)

TL; DR

Изменить генеракодицетагкод в поле отображения на

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

<Сильная> длинная версия

У меня была следующая структура БД в устаревших дБ, пожалуйста, обратите внимание на <Щел> Tinyint (4) в столбце Renacodicetacode

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
.

а затем во время работы default: '1' Я закончил с diff, пока

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

Я не мог внести какую-либо модификацию в существующую БД (но даже сделать это, не решила проблему, я все еще получил эту различие)

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
.

Теперь даже с использованием просто is_active он распознает Tinyint (4) правильно

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top