Создайте правильные даты начала и окончания с помощью 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")>'