Тип логики доктрины не может быть установлен в ложь - PullRequest
0 голосов
/ 25 апреля 2018

Я не могу установить значение false для столбца объекта, тип которого boolean.

/**
 * @ORM\Column(type="boolean")
 */
private $isActive;

Отправка JSON:

{myEntity: {isActive: false}}

... вызовет:

Нарушение ограничения целостности: 1048 Столбец 'is_active' не может быть нулевым

При отправке:

{myEntity: {isActive: 0}}

... будет нормально работать

Есть несколько аналогичных ответов на stackoverflow, но ни одно из решений не сработало.

RAW COLUMN

+--------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra           |
+-------------+--------------+------+-----+---------+-----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment  |
| is_active   | tinyint(1)   | NO   |     | NULL    |                 |
+-------------+--------------+------+-----+---------+-----------------+

EDIT

Прочитайте мой ответ ниже. Это не ошибка Doctrine, а серия MariaDB 10.2.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

К сожалению, это не решение основной проблемы, однако оно даст некоторое представление.

Проблема перевода false в null возникает с серией MariaDB 10.2 (не тестировала серию 10.0).

Описанная проблема не возникает в серии MySQL или MariaDB 5.5 и корректно преобразует false в false.

Еще одна проблема, связанная с ошибкой MariaDB 10.2.

0 голосов
/ 25 апреля 2018

В качестве альтернативы вы должны оценить выполнение:

/**
 * @ORM\Column(type="boolean", nullable=true)
 */
private $isActive;

Вы не всегда сможете и / или захотите инициализировать значение в классе.

UPDATE:

Я понимаю, что мой ответ не был правильным. Возможно, вы могли бы инициализировать свойство в конструкторе или вызывать его автоматически. В любом случае вы должны «обмануть» Единицу Работы Доктрины, что ваша сущность изменилась.

...