1

我想在 orderDatetime 字段中创建一个紧跟日期时间的 completedDatetime。

Fixtures.yml

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

我在我的夹具文件中使用了上面的代码并获得了以下数据。

在此处输入图像描述

有没有办法使用伪造的数据来确保理智的结果,而不是在 LoadFixtures 中编写自定义函数?

4

1 回答 1

0

由于您将字符串“orderDatetime”传递给strtotime()函数,因此它返回 1970 年,您的dateTimeBetween作品如dateTimeBetween('1970', 'now'). 变量的传递是用$orderDatetime. 但是如果你将这样的变量传递给dateTimeBetween(),未来的 dateTime 可能会被传递,这是不可能的。

仅当您的订单日期已过时才有效:

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

如果您不想生成未来的日期,那么您需要创建自定义的 faker 函数,例如:

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")>'
于 2017-06-01T08:03:21.823 回答