Intereting Posts
CakePHP: как использовать миграцию для вставки записей Как повторять что-то каждые 4 минуты в бесконечном цикле Шифрование RSA. Создайте шифрованный текст в PHP и расшифруйте его в Javascript Преобразование времени GMT в локальное время с использованием смещения часового пояса в php JQuery, перетаскивание и сохранение в базу данных mysql? Необходимо удалить лишнее пространство между часто задаваемыми вопросами. Использование CSS и Bootstrap Отображение страницы профиля пользователя PHP Как получить intellisense для индекса ассоциативного массива PHP? Вставить коллекцию форм – учение, symfony Неустранимая ошибка: допустимый размер памяти с помощью Drupal Eclipse PDT против NetBeans для разработки PHP Как показать индикатор выполнения в загрузке файла ajax Наследование класса в PHP 5.2: переопределение статической переменной в классе расширения? PHP-Java Bridge vs. RESTful WebService: Что касается производительности, которая лучше? Возможно ли расширить функцию вызова функции в строке PHP?

Значение Doctrine 2 + unsigned

Можно ли указать тип столбца unsigned integer в Doctrine 2?

Вы можете, но потеряете переносимость. Используйте атрибут columnDefinition и установите для него значение integer unsigned . Фактический код зависит от того, что вы используете.

columnDefinition: фрагмент DDL SQL, который начинается после имени столбца и определяет полное (не переносное!) определение столбца. Этот атрибут позволяет использовать расширенные функции RMDBS. Однако вы должны тщательно использовать эту функцию и последствия. SchemaTool больше не будет определять изменения в столбце, если вы используете «columnDefinition».

 / **
  * @ORM \ Column (name = "id", type = "integer", options = {"unsigned" = true})
  * /

В доке (который я видел) нет места, говорящего об этом, но он работает.

Обновить

Определение в Ямле (начиная с 2.4 для первичного ключа)

 id: type: integer options: unsigned: true 

Десятичные числа позволят использовать такие большие числа и позволяют сохранить SchemaTool, просто установите шкалу в 0.

 <?php /** * @Column(type="decimal", precision=20, scale=0, nullable=false, unique=true) */ Protected $facebookId; 

Оформите полную запись о том, почему здесь . [EDIT] (ссылка не работает) Я вставлял следующую статью. Это было написано мной в любом случае;)

беззнаковые числа, настолько большие, что ваш мозг взорвется! w / Доктрина 2

У ORM есть неотъемлемая проблема. Как вы берете тип данных только для поддержки некоторых RDBMS и позволяете использовать его в любом случае. Ну, когда дело доходит до Doctrine 2 и беззнаковых чисел, они немного ленивы.

Все, что я хочу сделать, это сохранить мои 64-битные идентификаторы facebook. Как это сложно? Ну, мои РСУБД – это mySQL, поэтому мне действительно нужен неподписанный bigint.

 <?php /** * @Column(type="bigint", nullable=false, unique=true, columnDefinition="unsigned") */ Protected $facebookId; 

Это кажется находкой и денди, пока вы не прочтете это:

columnDefinition: фрагмент DDL SQL, который начинается после имени столбца и определяет полное (не переносное!) определение столбца. Этот атрибут позволяет использовать расширенные функции RMDBS. Однако вы должны тщательно использовать эту функцию и последствия. SchemaTool больше не будет определять изменения в столбце, если вы используете «columnDefinition». В основном, эта функция позволяет вам бесплатно создавать неподтвержденные вещи в определении столбца. Внедрение беззнаковых чисел технически ПОДДЕРЖИВАЕТСЯ ПОДДЕРЖКОЙ! Не говоря уже о том, что мои системы развертывания dev и QA в значительной степени зависят от SchemaTool. Мы можем поблагодарить комбинацию ленивых разработчиков в Doctrine и sqlite3 за этот маленький самородок сумасшедшего города.

Это немедленно вызвало поиск Google. Мне не нравится думать, если мне это не нужно. Что я нашел? Все используют varchars. VARCHARS!?!? У меня был сердечный приступ. Это было просто неприемлемо.

Таким образом, вводится десятичная. Идеально. Размер хранилища является переменным, и он хранится в двоичном формате, поэтому индексирование происходит очень быстро. Мы просто устанавливаем десятичную точность в ноль и voilà. ORM может переносить это на любые СУБД, он достаточно велик для нас, чтобы не заботиться о неподдерживаемом подписанном / неподписанном выпуске, и он молниеносно. десятичный (20,0) должен отлично справляться с размером нашего восемнадцати пятидесяти четырех миллиардов четыреста четыреста триллиона семьсот сорок четыре триллиона семьдесят три миллиарда семьсот девяносто пятьсот пятьдесят одна тысяча шестьсот пятнадцать.

 <?php /** * @Column(type="decimal", precision=20, scale=0, nullable=false, unique=true) */ Protected $facebookId; 

Документация Doctrine 1 и документация Doctrine 2 говорят, что вы можете сделать это следующими способами:

Аннотации PHP:

 /** * @Column(type="integer", name="some_field" options={"unsigned":true}) */ protected $someField; 

Ямл: ( см. Документы )

 MyEntity: fields: someField: type: integer column: some_field options: unsigned: true 

Надеюсь, это поможет кому-то сэкономить время;)