Создайте правильные даты начала и окончания с помощью nelmio\alice

Я хочу создать completeDatetime, который следует за datetime в поле orderDatetime.

Fixtures.yml

directive_{200..500}:
    orderDatetime: <dateTimeThisYear()>
    completedDatetime: '90%? <dateTimeBetween("orderDatetime", "now")>'

Я использовал приведенный выше код в своем файле фикстур и получил следующие данные.

введите описание изображения здесь

Есть ли способ обеспечить нормальный результат, используя фейкерные данные, кроме написания пользовательских функций в LoadFixtures??

1 ответ

Поскольку вы передаете строку "orderDatetime" в strtotime() функция возвращает 1970 год и ваш dateTimeBetween работает как dateTimeBetween('1970', 'now'), Передача переменных осуществляется с $orderDatetime, Но если вы передадите такую ​​переменную dateTimeBetween(), будущее dateTime может быть пройдено, что невозможно.

Работает только в том случае, если дата вашего заказа уже прошла:

orderDatetime: '<dateTimeBetween("-200 days", "now")>'
completedDatetime: '90%? <dateTimeBetween($orderDatetime, "now")>'

Если вы хотите сгенерировать будущие даты, вам нужно создать собственную функцию фейера, например:

public function dateTimeBetweenAfter($dateFrom, $dateTo)
{
    $date = new DateTime($dateFrom->format('Y-m-d H:i:s'));
    $dateTo = $date->modify($dateTo);

    return FakerDateTime::dateTimeBetween($dateFrom, $dateTo);
}

и используйте это так:

orderDatetime: <dateTimeThisYear()>
completedDatetime: '90%? <dateTimeBetweenAfter($orderDatetime, "+1 year")>'
Другие вопросы по тегам