Так у меня есть App\Post
модели в моем приложении, определяются следующим образом:Laravel Model Factoryories и Eloquent; установка дата
namespace App;
class Post extends Model
{
use SoftDeletes;
protected $dates = ['created_at', 'updated_at', 'published_at', 'deleted_at'];
// etc...
}
Я создал модель завод, хорошую новую особенность Laravel 5.1 для определения светокопии в Post
следующим образом:
$factory->define('App\Post', function($faker) {
return [
'title' => $faker->sentence,
'content' => $faker->paragraph,
'published_at' => $faker->dateTimeThisMonth(),
];
});
Как мы можем видеть, что я установить published_at
поле, чтобы быть случайной датой в этом месяце, генерируемый экземпляром Faker
. Используемый метод возвращает экземпляр DateTime
.
Однако, когда я генерирую Post
s, я нахожу, что поле published_at
является нулевым, что указывает на то, что экземпляр DateTime
был неправильным образом интерпретирован.
Я обнаружил, что если бы я изменил эту строку:
'published_at' => Carbon::instance($faker->dateTimeThisMonth())->toDateTimeString(),
, который по существу преобразует DateTime
к Carbon
, а затем выводит даты и времени, например, строку "2015-06-15 13:44:23"
, он работает правильно.
Действительно ли это лучший способ определить даты фальсификаций на фабриках моделей? Я бы подумал, что я определил published_at
в массиве $dates
. Laravel интерпретировал бы экземпляр DateTime
(или Carbon
) и сохранил его без необходимости предоставления строки.
Редактировать
Я нахожу, что это тоже не работает для простых красноречивый создает:
Э.Г. если я бегу
App\Post::create([
'title' => $title,
'content' => $faker->paragraph(4),
'published_at' => new Carbon,
'created_at' => Carbon::parse('2015-06-16')
]);
published_at
и created_at
поле по-прежнему нулевой. Есть идеи?
Я видел пару видео Laracasts, и Джеффри всегда использует Carbon внутри фабрик. Итак, я бы сказал, что это лучший способ. – zeratulmdq