Laravel 4:为什么我在使用first()而不是take()时可以访问模型访问器?

时间:2014-10-23 04:20:16

标签: php laravel eloquent

我试图从我的数据库中返回一些最近的帖子,按日期排序,然后我想通过我的模型选择并返回帖子的月份{{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);
}

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

这是因为->first()返回了一个雄辩的模型。使用get()方法返回一个雄辩的集合(一组雄辩的模型)。所以你必须像这样对集合运行一个foreach:

@foreach($post->recent() as $recent) {{$recent->month }} @endforeach