我正在困扰Laravel的一个问题。我有一个名为News的模型
class News extends Model {
protected $fillable = ['title', 'content', 'published_at'];
protected $dates = ['created_at', 'updated_at', 'published_at'];
public function author() {
return $this->belongsTo(User::class, 'user_id');
}
public function setPublishedAtAttribute($value) {
return Carbon::createFromFormat('d/m/Y H:i', $value)->toDateTimeString();
}
public function scopePublished($query) {
return $query->whereDate('published_at', '<', Carbon::now());
}
public function scopeLatestNews($query) {
return $query->latest()->with('author');
}
}
当我尝试存储新的新闻资源时:
public function store(StoreBlogPost $request) {
$news = Auth::user()->news()->create($request->all());
return redirect()->route('blog.show', $news);
}
我收到了一个QueryException SQLSTATE [HY000]:一般错误:1364字段'published_at'没有默认值。
查询看起来像那样
insert into `news` (`title`, `content`, `user_id`, `updated_at`, `created_at`)
但是当我删除mutator setPublishedAtAttribute时,错误消失但我得到了一个非格式化的日期错误(这就是我使用mutator的原因)。
答案 0 :(得分:5)
你的mutator应该设置属性,而不是返回它的新值:
public function setPublishedAtAttribute($value) {
$this->attributes['published_at'] = Carbon::createFromFormat('d/m/Y H:i', $value)->toDateTimeString();
}