我试图从我的数据库中返回一些最近的帖子,按日期排序,然后我想通过我的模型选择并返回帖子的月份{{1}访问器方法。为实现这一目标,我使用了范围查询。当我使用getMonthAttribute()
仅返回单个结果时,这一切都正常,但当我使用first()
或take(1)
时,我会收到以下错误:
take()
在我的模型中,我有这个月属性访问器:
Undefined property: Illuminate\Database\Eloquent\Collection::$month
和我的范围查询返回可变数量的最近帖子(我的代码部分不起作用):
public function getMonthAttribute() {
return Carbon::createFromFormat('Y-m-d',$this->date)->format('F');
}
以下是我在视图中访问数据的方式:
public function scopeRecent($query, $take = 1) {
// Replace take with first and I no longer receive the above error.
return $query->where('status', '=', '1')->orderBy('date', 'DESC')->get()->take($take);
}
有什么建议吗?
答案 0 :(得分:2)
这是因为->first()
返回了一个雄辩的模型。使用get()
方法返回一个雄辩的集合(一组雄辩的模型)。所以你必须像这样对集合运行一个foreach:
@foreach($post->recent() as $recent)
{{$recent->month }}
@endforeach