Странное поведение доктрины Symfony во время теста phpunit - поле в базе данных становится нулевымPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Странное поведение доктрины Symfony во время теста phpunit - поле в базе данных становится нулевым

Сообщение Anonymous »

Я использую
  • Symfony v6.4.8
  • doctrine/orm 2.19.5
  • phpunit/phpunit 9.6.19
Я создал конечную точку GET REST API /api/contract/{$id} в Symfony.
Он выполняет запрос API в другой системе, получает эти данные, объединяет их с данными локальной базы данных и создает новую запись в моей базе данных.
У меня проблема в том, что / после persist()/flush() в базе данных: иногда поле $contract->eup имеет значение NULL в база данных. определяется как nvarchar(10) в базе данных MSSQL.

Код: Выделить всё

private function saveContract(EntityManager $em, array $data): ContractData
{
$contract = new ContractData();
// [... some more variables]
$contract->setEup($data['eup']);  // example: "2024-06-29"

$em->persist($contract);
$em->flush();

return $contract;
}
Когда я вызываю свой API с помощью Postman, запись создается правильно, а поле eup в базе данных заполняется строкой.
Когда я вызываю свой API с помощью Postman, запись создается правильно, а поле eup в базе данных заполняется строкой.
Когда я вызываю свой API с помощью Postman, запись создается правильно, а поле eup в базе данных заполняется строкой.
Когда я вызываю свой API с помощью Postman, запись создается правильно, а поле eup в базе данных заполняется строкой.
Когда я вызываю свой API с помощью Postman, запись создается правильно, а поле eup в базе данных заполняется строкой.
Когда я вызываю свой API с помощью Postman, запись создается правильно, а поле eup в базе данных заполняется строкой.
p>
Но когда я запускаю тест phpunit php bin/phpunit --filter myTest, он вызывает API, запись создается в базе данных, но поле eup имеет значение NULL.
  • Другие поля этой записи сохраняются правильно на тесте.
  • Также можно записать значение этого поля в другие поля.
    < /li>
    Также пробовал использовать более короткую строку, но она тоже не сохраняется.
  • Я я также запустил тест с помощью xdebug и могу подтвердить (вместе с моим коллегой), что $contract->eup установлен и заполнен строкой в ​​$em->persist($contract);, но когда мы смотрим после сброса в базе данных SELECT * FROM ... поле eup равно NULL.
У вас есть идеи, что может быть не так?

Подробнее здесь: https://stackoverflow.com/questions/786 ... es-null-in
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»