Laravel模型工厂和雄辩的人;设定日期

har*_*ryg 5 php datetime laravel laravel-5

所以我App\Post在我的应用程序中有一个模型,定义如下:

namespace App;
class Post extends Model 
{

    use SoftDeletes;

    protected $dates = ['created_at', 'updated_at', 'published_at', 'deleted_at'];
    // etc...
}
Run Code Online (Sandbox Code Playgroud)

我创建了一个模型工厂,这是Laravel 5.1中的一个不错的新功能,用于定义a的蓝图,Post如下所示:

$factory->define('App\Post', function($faker) {
    return [
    'title'     => $faker->sentence,
    'content'   => $faker->paragraph,
    'published_at' => $faker->dateTimeThisMonth(),
    ];
});
Run Code Online (Sandbox Code Playgroud)

如我们所见,我将该published_at字段设置为该月由Faker实例生成的随机日期。使用的方法返回的实例DateTime

但是,当我生成一些Posts时,我发现该published_at字段为null,这表明该DateTime实例未正确解释。

我发现如果我将该行更改为:

'published_at' => Carbon::instance($faker->dateTimeThisMonth())->toDateTimeString(),
Run Code Online (Sandbox Code Playgroud)

实质上将转换DateTimeCarbon,然后输出日期时间字符串,例如"2015-06-15 13:44:23",它可以正常工作。

这真的是在模型工厂中定义假日期的最佳方法吗?我以为我published_at$datesLaravel数组中定义的事实将解释DateTime(或Carbon)实例并保存它而无需提供字符串。

编辑

我发现这对于简单的Eloquent创建也不起作用:

例如,如果我跑步

App\Post::create([
    'title' => $title,
    'content' => $faker->paragraph(4),      
    'published_at' => new Carbon,
    'created_at' => Carbon::parse('2015-06-16')
]);
Run Code Online (Sandbox Code Playgroud)

published_atcreated_at场均仍然空。有任何想法吗?

Tim*_*Tim 5

由于 Faker 正在返回一个 DateTime-Object,它不代表像 mysql like it ( Y-m-d H:i:s)这样的日期字符串,该字段将被设置为 null。

但是,您应该能够访问 objects 属性date以获取正确的字符串,如下所示:

$faker->dateTimeThisMonth()->format('Y-m-d H:i:s')
Run Code Online (Sandbox Code Playgroud)

这应该返回这样的日期 string '2015-06-19 13:07:07' (length=19)