[英]Laravel Model Factories and Eloquent; setting dates
所以我在我的應用程序中有一個App\\Post
模型,定義如下:
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
我發現published_at
字段為null,表明沒有正確解釋DateTime
實例。
我發現如果我將該行更改為:
'published_at' => Carbon::instance($faker->dateTimeThisMonth())->toDateTimeString(),
它實質上將DateTime
轉換為Carbon
,然后輸出日期時間字符串,例如"2015-06-15 13:44:23"
,它可以正常工作。
這真的是在模型工廠中定義faker日期的最佳方式嗎? 我會想到我在$dates
數組中定義了published_at
這一事實Laravel將解釋DateTime
(或Carbon
)實例並保存它而不必提供字符串。
編輯
我發現這也不適用於簡單的Eloquent創建:
比如,如果我跑
App\Post::create([
'title' => $title,
'content' => $faker->paragraph(4),
'published_at' => new Carbon,
'created_at' => Carbon::parse('2015-06-16')
]);
published_at
和created_at
字段仍為null。 有任何想法嗎?
由於Faker返回一個DateTime-Object,它不代表像mysql這樣的日期字符串,所以它( Ymd H:i:s
)將該字段設置為null。
但是,您應該能夠訪問對象屬性date
以獲取正確的字符串,如下所示:
$faker->dateTimeThisMonth()->format('Y-m-d H:i:s')
這應該返回一個像這個string '2015-06-19 13:07:07' (length=19)
的日期string '2015-06-19 13:07:07' (length=19)
您可以在模型工廠內使用Carbon
日期而不會出現問題。
為了使其工作,請將published_at
和created_at
添加到$fillable
屬性。
那它應該工作正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.