Каково поведение Doctrine по умолчанию для сохранения пустых строк из POST?Я хотел бы сохранить значения NULL - PullRequest
0 голосов
/ 27 февраля 2019

Я сохраняю некоторые значения из формы (управляемой CodeIgniter) в простые сущности Doctrine.Некоторые из моих полей являются необязательными.

Пример кода контроллера:

$entity->setDistance($this->input->post('distance'));
$entity->setKilometricRate($this->input->post('kilometric_rate'));
$this->getEntityManager()->persist($entity);
$this->getEntityManager()->flush($entity);

Когда я не заполняю некоторые поля в форме, тогда 0 сохраняется в базе данных (так как php конвертирует"" в 0).

Пример кода объекта:

/**
 * @var float|null
 *
 * @ORM\Column(name="distance", type="float", precision=53, scale=0, nullable=true)
 */
private $distance;

/**
 * @var float|null
 *
 * @ORM\Column(name="kilometric_rate", type="float", precision=53, scale=0, nullable=true)
 */
private $kilometricRate;

Есть ли способ указать Doctrine сохранить значение NULL вместо 0 или пустую строку, без тестированиявсе строки во всех установщиках?

В данный момент я использую пользовательский помощник, но я совершенно уверен, что есть лучший способ сделать это.

Помощник:

public function getValueOrNull(?string $postedVal):?string{
    if ($postedVal==="0") return "0";
    return (!empty($postedVal) ? $postedVal : null);
}

1 Ответ

0 голосов
/ 27 февраля 2019

Есть несколько мест, где вы можете заняться этим.Например, вы можете проверить, как CodeIgniter обрабатывает формы, и убедиться, что пустые поля возвращают пустое значение.Я недостаточно хорошо знаю CI, чтобы сказать, насколько это легко и где это может вызвать побочные эффекты.

Вы также можете иметь дело с этим в своих сущностях, убедившись, что всякий раз, когда кто-то устанавливает значение с пустой строкой, этопреобразуется в null:

class MyEntity
{

    // ...

    public function setDistance($distance)
    {
        if ($distance === '') {
            $distance = null;
        }
        $this->distance = $distance;
    }
}

Если вы хотите всегда иметь это для поплавков, вы можете создать пользовательский тип, расширяющий float, и изменить метод convertToPHPValue.См. https://www.doctrine -project.org / projects / doctrine-dbal / ru / 2.9 / reference / types.html # custom-mapping-types

...